2011-08-17 12 views
26

Używam pliku Handlebars.js jako narzędzia do tworzenia szablonów dla mojej aplikacji Backbone.js. Moi renderowanie funkcji w moich poglądów zazwyczaj wygląda następująco:Zatrzymaj kręgosłup od dodawania otaczających elementów div do widoku?

var source = $("#round").html(); 
    var template = Handlebars.compile(source); 
    var context = JSON.parse(JSON.stringify(this.model)); 
    var html = template(context); 
    $(this.el).html(html); 
    return this; 

Powyższe jest dołączany do głównego aplikacji widzenia poprzez następującego kodu (jest to kod, który wywołuje powyższy kod):

$('div#round-container', this.el).append(roundView.render().el); 

Szablon Moje kierownice obsługuje wszystkie style i układ, więc pozostawiam element "el" pustego widoku. Backbone.js automatycznie dodaje otaczające znaczniki div wokół szablonu Handlebars. Zakładam, że dzieje się tak dlatego, że element "el" jest pusty. Czy istnieje sposób, aby zapobiec dodawaniu otaczających tagów div? Dzięki!

Odpowiedz

40

To, co się dzieje, to this.el jest tworzone w locie, ponieważ nigdy nie było jawnie ustawione przez Ciebie. Masz dwie opcje:

  1. należy określić element, który chcesz utworzyć z tagName, className i/lub id i pozwalają tworzyć kręgosłup to za Ciebie.

  2. W render należy ustawić this.el do zawartości szablonu kierownicy. Tak więc masz this.el = $(template(context)).

Docs mają rozszerzoną wyjaśnienie - http://documentcloud.github.com/backbone/#View-el

+5

setElement to również fajna opcja –

+1

After goi ng z opcją 2., zdarzenie submit nie jest uruchamiane – svlada

+0

@svlada, 'setElement' również wywołuje' this.undelegateEvents(); 'oraz' this.delegateEvents(); 'zapewnia, że ​​zdarzenia w haszowaniu zdarzeń są stosowane do nowego element. Możesz zadzwonić do nich, gdy setElement nie wchodzi w grę. [źródło] (http://backbonejs.org/docs/backbone.html#section-162) –

5

Innym sposobem jest, aby dołączyć childNodes świadczonych elementu zamiast

$('div#round-container', this.el).append(roundView.render().el.childNodes); 
+1

Nie używaj tego, stracisz całe wydarzenie w swoich widokach. – Brent

+0

Spędziłem 2 godziny próbując dowiedzieć się, dlaczego .. :( – Brent

3

lub dołączania kodu HTML świadczonych element, na przykład:

$('div#round-container', this.el).append(roundView.render().el.html()); 
Powiązane problemy