[英]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.