我正在使用Backbone布局管理器Boilerplate。不幸的是,发生了一个令人沮丧的错误我喜欢渲染项目列表作为insertView函数插入的子视图。在第一次加载时,everthing工作正常。但重新加载后,click事件不再起作用了:(。我已经尝试手动调用TableItem View上的delegateEvents()但没有任何改变。我希望任何人都可以给我一个线索。
App.Views.Item = Backbone.View.extend({
template: "templates/item",
tagName: "li",
events: {
"click .applyButton" : "apply",
"click .viewDetailsButton" : "showDetail"
},
serialize: function() {
return { table : this.model.toJSON() };
},
apply: function(ev) {
ev.preventDefault();
alert("apply button clicked");
},
showDetail: function(ev) {
ev.preventDefault();
var id = this.model.get("_id");
app.router.navigate("#events/"+ id, {trigger : true})
}
});
/*
* List View
*/
App.Views.List = Backbone.View.extend({
template: "templates/list",
tagNam: "ul",
className: "tableList",
beforeRender: function() {
var events = this.model.get("userEvents").get("hosting");
events.each(function(model) {
this.insertView(new App.Views.Item({ model : model }));
}, this);
},
serialize: function() {
return {};
}
});
答案 0 :(得分:0)
我认为您可能希望在布局管理器删除视图时,在项目视图中将cleanup
函数添加到undelegate
事件。我不知道这是否能解决你的问题,但这似乎是一种很好的做法。
当你在重新加载之后说时,你的意思是用浏览器重新加载按钮重新加载页面吗?如果是这样,你如何让它首先发挥作用?
如果您可以提供设置的jsfiddle,或者指向我们的仓库,那么我们可以在我们的机器上进行测试。确保包含路由器,以便我们可以查看视图和包含它的布局是如何初始化的。