[英]Backbone refresh view events
在我看來,我沒有聲明this.el,因為我以恐怖的方式創建它,但是這樣事件就不會發生。
這是代碼:
查看1:
App.Views_1 = Backbone.View.extend({
el: '#content',
initialize: function() {
_.bindAll(this, 'render', 'renderSingle');
},
render: function() {
this.model.each(this.renderSingle);
},
renderSingle: function(model) {
this.tmpView = new App.Views_2({model: model});
$(this.el).append( this.tmpView.render().el );
}
});
觀點2:
App.Views_2 = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render');
},
render: function() {
this.el = $('#template').tmpl(this.model.attributes); // jQuery template
return this;
},
events: {
'click .button' : 'test'
},
test: function() {
alert('Fire');
}
});
});
當我點擊“.button”時沒有任何反應。 謝謝;
在render()方法結束時,您可以告訴骨干使用delegateEvents()重新綁定事件。 如果您沒有傳入任何參數,它將使用您的事件哈希。
render: function() {
this.el = $('#template').tmpl(this.model.attributes); // jQuery template
this.delegateEvents();
return this;
}
從Backbone.js v0。9。0(2012年1月30日)開始,有一個setElement方法來切換視圖元素並管理事件委托。
render: function() {
this.setElement($('#template').tmpl(this.model.attributes));
return this;
}
Backbone.View setElement : http : //backbonejs.org/#View-setElement
setElementview.setElement(元件)
如果您想將Backbone視圖應用於其他DOM元素,請使用setElement,它還將創建緩存的$ el引用,並將視圖的委托事件從舊元素移動到新元素。
以這種方式動態創建視圖有其優點和缺點:
優點:
缺點: - 這些幾乎可以忽略不計
setElement
將從該列表中獲取第一個元素並丟棄其余元素。
setElement
並確保傳入的element.length === 1
來緩解此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.