在路由器中,我使用以下代码创建搜索视图:
(if
仅创建一个new
视图,其中一个视图尚不存在,因为视图永远不会更改。)
search: function () {
if (!this.searchView) {
this.searchView = new SearchView();
}
$('#content').html(this.searchView.el);
this.headerView.selectMenuItem('search-menu');
},
在视图中,我有一个事件哈希,将点击事件绑定到搜索按钮:
events: {
"click .search-query": "search"
},
这导致事件仅在首次使用搜索按钮时触发
从搜索功能中删除if
可以解决问题。
然而,这似乎不是解决此问题的正确方法,因为不需要重新创建视图(重新初始化和重新呈现)。
我尝试将this.delegateEvents();
添加到搜索视图的渲染功能中,如下所示(同时将if
留在搜索功能中),但它没有解决问题:
render:function () {
console.log('rendering search...');
$(this.el).html(this.template());
this.delegateEvents();
return this;
},
任何建议将不胜感激。
答案 0 :(得分:1)
由于您未再次致电render()
,因此不会再次调用delegateEvents
。您可以直接在路由器中呼叫delegateEvents
。这只是一个例子;可能有更优雅的方法来做到这一点。
delegateEvents
基本上会将事件重新绑定到您的视图中。如果您的视图的html从dom中删除,这将非常有用。这看起来像你的例子中发生的事情。
search: function () {
if (!this.searchView) {
this.searchView = new SearchView();
}
$('#content').html(this.searchView.el);
this.searchView.delegateEvents();
this.headerView.selectMenuItem('search-menu');
}