0

在路由器中,我使用以下代码创建了一个搜索视图:(
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;
},


任何建议,将不胜感激。

4

1 回答 1

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');
}
于 2013-08-31T20:49:41.993 回答