2011-09-15 7 views
16

Próbuję zawrzeć moją głowę wokół tego pojęcia.BackboneJs: W widoku jaka jest różnica między el: i tagName:

Czy możesz mnie o tym zapomnieć i może podać prosty przykład różnicy między atrybutem el: a atrybutem tagName:?

W niektórych przykładach różne widoki używają czasami el:, a inne używają tagName:.

jestem specjalnie aprowizacji z mojego własnego wykonania niniejszej example

+1

el odniesie się do istniejących elementów w naszym DOM, natomiast tagName utworzymy nowy element dom z tagName z className, jeśli zostanie podany. – STEEL

Odpowiedz

17

Różnica jest taka:

el powinny być używane, aby zachować odniesienie do rzeczywistego węzła DOM reprezentującego widok jako całości.

Oznacza to, że można łatwo wykonywać na nim czynności za pomocą jQuery lub w/e. $ (this.el) .hide() lub $ (this.el) .html ("Jestem teraz obiektem Jquery");

TagName to tylko ciąg, który jest używany do określenia typu węzła DOM, który będzie el. Domyślnie jest to div, ale jeśli chcesz, możesz zrobić z niego dowolny element HTML.

Rozważmy:

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); 

Problem może być uruchomiony na to, że czasem trzeba ustawić el na instancji z widoku, w którym to przypadku zmienna jest bez znaczenia:

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

Więc nigdy nie są używane razem? –

+2

nie mogą być używane razem. jeśli podasz 'el' bezpośrednio, twoje' tagName' zostanie zignorowane. –

+0

Można ich używać razem, po prostu nie można jawnie ustawić this.el = $ (somethingelse) i oczekiwać, że będzie to honorować.tagName. Jeśli użyjesz $ (this.el) .html ("kilka rzeczy"), to będzie w tym, co to jest. NazwaTag jest. –

-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(); 

Myślę, że to powinno działać dobrze.

+0

'this' w' el: $ (this.tagName) 'nie będzie tym, czym myślisz, że jest. –

Powiązane problemy