2011-09-15 7 views
16

Estoy tratando de entender este concepto.BackboneJs: En una vista cuál es la diferencia entre el: y tagName:

¿Puede simplificar esto para mí y tal vez proporcionar un ejemplo simple de la diferencia entre el atributo el: y el atributo tagName:?

En algunos ejemplos, diferentes vistas usan el: a veces y otras usan tagName:.

estoy metiendo específicamente con mi propia implementación de este example

+1

el hará referencia a los elementos existentes en nuestro DOM, mientras que tagName crearemos un nuevo elemento dom con el tagName con className si se proporciona. – STEEL

Respuesta

17

La diferencia es la siguiente:

EL debe utilizarse para preservar una referencia al nodo DOM real que representa la vista en su conjunto.

Esto significa que puede realizar fácilmente acciones en él con jQuery o w/e. $ (this.el) .hide() o $ (this.el) .html ('Ahora soy un Objeto de Jquery');

TagName es solo una cadena que se usa para determinar el tipo de nodo DOM que el el será. El valor predeterminado es div, pero si lo desea, puede convertirlo en cualquier elemento HTML que desee.

considerar:

var view = Backbone.View.extend({ 
    tagName: 'p', 
    initialize: function() { 
     _.bindAll(this, 'render'); 
    }, 
    render: function() { 
     $(this.el).html('I am a jQuery-ized paragraph'); 
     return this; 
    } 
}); 


$(document.body).append(new view().render().el); 

El problema que pueda estar ejecutando en es que a veces se establece el de la creación de instancias de una vista, en cuyo caso el tagName es irrelevante:

var myView = new view({ el: $("someExistingEl") }); 
+0

¿Entonces nunca se usan juntos? –

+2

no se pueden usar juntos. si especifica un 'el' directamente, su' tagName' será ignorado. –

+0

Se pueden usar juntos, simplemente no se puede establecer explícitamente this.el = $ (somethingelse) y se espera que respete this.tagName. Si usa $ (this.el) .html ('algunas cosas'), estará dentro de lo que this.tagName es. –

-3
var View = Backbone.View.extend({ 
    tagName: 'span', 
    id: 'identity', 
    class: 'classy', 
    el: $(this.tagName), // or 
    el: $('<' + this.tagName + ' />', { 
    id: this.id,  // identity 
    'class': this.class // classy 
    }) // this is jQuery shorthand for building an element fyi 
}); 

var view = new View(); 

Creo que debería funcionar bien.

+0

'this' in' el: $ (this.tagName) 'no será lo que piensas que es. –

Cuestiones relacionadas