主干视图事件仅在视图呈现后触发一次
Backbone View event firing only once after view is rendered
从路由器,我使用以下代码创建一个搜索视图:
(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;
},
任何建议将不胜感激。
由于您不再调用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');
}
相关文章:
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- Javascript html每点击一次就会更改url
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- MVC 分部视图中的 JQuery UI 自动完成功能只能工作一次
- c#mvc一次只允许一个用户编辑树视图
- Ui路由器:复合视图渲染视图一次
- 想要在fullcalendar插件的周视图中一次显示3天
- 为下一次实例化设置的主干视图属性
- 主干视图事件仅在视图呈现后触发一次
- 可以在backbone.js中将子视图附加到网格中一次
- 一次将网格视图数据从客户端发送到服务器端
- 在网格视图内(单击时标签转到文本框)一次一个
- 当使用局部视图时,只添加一次javascript代码
- 添加DOM视图太慢了,需要一种更好的方法来缓存一次视图并重用它供以后使用
- Extjs 4数据视图拖放(复制)只工作一次
- 让骨干视图共存,或者一次创建和销毁一个
- Form ng-submit加载一个子视图,但只加载一次
- 为后端和前端视图(PHP,Backbone)定义一次HTML
- 您如何在离子视图中显示加载或一次将所有应用程序加载到缓存/内存中