嵌套视图:使用适当的ui

时间:2016-01-13 02:01:17

标签: javascript backbone.js javascript-events backbone-views backbone-events

我有应用程序,其中一种类型的视图嵌套在相同的类型。像这样http://take.ms/ylAeq

如何在正确的视图上捕获视图按钮上的事件并触发事件?

我有 ~10 触发事件的情况cuz backbone将事件绑定到所有内部按钮,而不仅仅是正确视图的按钮

我有一个想法 - 我在模板id="node_body_<%= id %>"中制作,因此每个按钮ID都基于它的视图模型ID。但是我怎么能把它传递给事件对象呢?事件:{ "click #node_body_" + id : 'method' }无效。

2 个答案:

答案 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是您在模板中使用的视图的属性。