我有应用程序,其中一种类型的视图嵌套在相同的类型。像这样http://take.ms/ylAeq
如何在正确的视图上捕获视图按钮上的事件并触发事件?
我有 ~10 触发事件的情况cuz backbone将事件绑定到所有内部按钮,而不仅仅是正确视图的按钮
我有一个想法 - 我在模板id="node_body_<%= id %>"
中制作,因此每个按钮ID都基于它的视图模型ID。但是我怎么能把它传递给事件对象呢?事件:{ "click #node_body_" + id : 'method' }
无效。
答案 0 :(得分:1)
问题在于事件冒泡。内部视图上的事件冒泡到它的父视图的Backbone.View.extend({
events: {
'click .thing': 'do_thing'
},
do_thing: function(event) {
event.stopPropagation(); // prevents event reaching parent view
}
});
,它正在侦听同一选择器上的事件,从而触发它的处理程序。
这可以通过在相应视图的处理程序中停止事件传播来解决:
{{1}}
答案 1 :(得分:0)
Backbone视图的大多数属性可以是函数而不是文字值。例如,这两件事有相同的结果:
Backbone.View.extend({
events: {
'click .thing': 'do_thing'
},
do_thing: function() { ... }
});
和
Backbone.View.extend({
events: function() {
return {
'click .thing': 'do_thing'
};
},
do_thing: function() { ... }
});
因此,如果您的events
依赖于视图的属性,那么您需要使用函数而不是对象文字:
events: function() {
var events = { };
var event_spec = 'click #nody_body' + this.id;
events[event_spec] = 'method';
return events;
}
假设id
是您在模板中使用的视图的属性。