我有一个视图,里面有一个视图(事实上,相同的视图,它的递归)。我只希望内部视图处理来自'a'onclick事件的事件。我试图通过仅指定选择器中的直接子节点来完成此操作,但它不起作用。
iv尝试过:events: { 'click >a': 'toggle' },
和
events: { 'click > a': 'toggle' },
但他们不工作,有什么建议吗? (注意:使用标签和类等操作不会起作用,因为视图是递归的(意味着内部和外部都具有相同的事件定义)
答案 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没试过这个,但它可能有用。