Backbone.js 如何从主干中的另一个视图绑定元素上的事件
我试图附加的事件来自另一个视图 我有两种看法Backbone.js 如何从主干中的另一个视图绑定元素上的事件,backbone.js,binding,views,underscore.js,models,Backbone.js,Binding,Views,Underscore.js,Models,我试图附加的事件来自另一个视图 我有两种看法 海德尔维 内容视图 我的headerView使用头模型,每次模型更改时,我都渲染()我的headerView 和大多数iPhone应用程序一样,我使用标题中的两个按钮进行导航,根据您所在的位置,图像可能会发生变化 这就是为什么在初始化随机contentView时,我可以访问headerView中的模型并更改属性 我需要做的最后一件事是为这个按钮创建一个点击事件 我试图在我的内容视图中绑定(这更有意义) 事件没有触发,只有当我将此事件放在heade
- 海德尔维
- 内容视图
事件没有触发,只有当我将此事件放在headerView中时才会发生,是否有推荐的干净解决方案可以这样做?主干网的整个要点。视图是将DOM子树的修改和事件处理封装到视图类中。因此,主干网不支持您的场景 你有几个选择来达到相同的最终结果 简单(但错误)的方法:使用jQuery来侦听标头的事件:
var ContentView = Backbone.View.extend({
initialize: function() {
$(".h_left").on('click', this.newLocation);
},
remove: function() {
$(".h_left").off('click', this.newLocation);
Backbone.View.prototype.remove.call(this);
}
});
这打破了header元素的封装,并将content视图与header元素的实现紧密耦合。换句话说:意大利面
正确的方法:使用中介将消息从标题传递到其他视图:
var HeaderView = Backbone.View.extend({
events: {
"click .h_left": "onLeftButtonClick"
},
onLeftButtonClick: function() {
//You can use the root Backbone object as a global event bus
//Publish a message
Backbone.trigger('header:leftbutton');
}
});
var ContentView = Backbone.View.extend({
initialize: function() {
//Subscribe to a message. If you use listenTo, the subscription is
//automatically cleared when your content view is destroyed.
this.listenTo(Backbone, 'header:leftbutton', this.newLocation);
},
newLocation: function() {
//..
}
});
你能提供JSFIDLE吗?我想没有必要,我会再解释一下。h_在你的内容视图的
el
或标题中留下了?它在标题中。在我们关闭这个内容视图时,我们不需要删除“listenTo”事件来防止内存泄漏吗?@KopaxJackHerrauer你不需要<当您删除视图时,listenTo
ed事件将被清除。查看backbonejs.org上的文档。谢谢……我也是backbone的新手。帮了我很多忙。也学到了新的东西。谢谢你,伙计。。。
var HeaderView = Backbone.View.extend({
events: {
"click .h_left": "onLeftButtonClick"
},
onLeftButtonClick: function() {
//You can use the root Backbone object as a global event bus
//Publish a message
Backbone.trigger('header:leftbutton');
}
});
var ContentView = Backbone.View.extend({
initialize: function() {
//Subscribe to a message. If you use listenTo, the subscription is
//automatically cleared when your content view is destroyed.
this.listenTo(Backbone, 'header:leftbutton', this.newLocation);
},
newLocation: function() {
//..
}
});