如何仅在Backbone.js事件处理程序中指定子项?

时间:2011-11-21 14:20:28

标签: javascript jquery backbone.js

我有一个视图,里面有一个视图(事实上,相同的视图,它的递归)。我只希望内部视图处理来自'a'onclick事件的事件。我试图通过仅指定选择器中的直接子节点来完成此操作,但它不起作用。

iv尝试过:

events: { 
    'click >a': 'toggle'
},

events: { 
    'click > a': 'toggle'
},

但他们不工作,有什么建议吗? (注意:使用标签和类等操作不会起作用,因为视图是递归的(意味着内部和外部都具有相同的事件定义)

3 个答案:

答案 0 :(得分:9)

我遇到了同样的问题,并通过停止在我的子视图中传播事件来解决它。例如......

events: {
    'click a': 'toggle'
},

toggle: function (e) {

    // Stop event here.
    e.stopImmediatePropagation();

    // Do more stuff...

}

这不会回答您关于如何指定特定子选择器的问题,但它会阻止事件传播到其他处理程序。

答案 1 :(得分:1)

如果您在单击该特定元素时没有触发其他事件,则

e.stopImmediatePropagation()很方便。你应该做的是将e.currentTarget与你想要选择的元素进行比较。即

events: {
    'click a': 'toggle'
}

toggle: function(e) {
    if (e.currentTarget == this.$el.find('a')[0]) {
        ...
    }
}

这样,如果你有一个父视图也在点击该链接时触发了一个事件,那么e.stopImmediatePropagation();

就不会停止它。

答案 2 :(得分:0)

您可能必须指定起始选择器...这意味着我不确定是否使用了基本选择器。

events: {
    'click #parent > a': 'toggle'
}

Haven没试过这个,但它可能有用。