Backbone View事件在呈现视图后仅触发一次

时间:2013-08-31 20:25:05

标签: javascript jquery backbone.js

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


任何建议将不胜感激。

1 个答案:

答案 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');
}