2011-11-21 70 views
10

我有在其内部具有的图(实际上相同的视图,其递归)的图。我只想要内部视图来处理来自'a'onclick事件的事件。我试图通过在选择器中只指定直接的孩子来做到这一点,但它不起作用。如何仅在Backbone.js事件处理程序中指定儿童?

IV尝试:

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

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

,但他们不工作,有什么建议? (注:做事情喜欢使用标签和类不会工作,因为该视图是递归的(意思是,无论是内部和外部具有相同的事件定义)

+0

你能告诉你的众目睽睽之下,你是如何将其实例化?在Backbone中,jQuery选择器自动作用于视图元素,它应该在理论上工作。 –

回答

9

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

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

toggle: function (e) { 

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

    // Do more stuff... 

} 

这不回答你的如何指定特定子选择的问题,但它使事件从传播给其它处理器。

0

您可能必须指定起始选择...这意味着我不知道基地选择假设。

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

没有试过,但它可能工作。

+0

不,家长获取事件太 – chacham15

+0

很好的了解,我想这可能与他们对事件的分析。 – Seth

+0

哦,是不是该事件是在子视图中生成的,而是传递给了父项?我如何过滤掉? – chacham15

1

e.stopImmediatePropagation()是方便,如果你有没有其他的活动,当您单击特定元素射击。你应该做的是将e.currentTarget与你想要选择的元素进行比较。即

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

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

这样一来,如果你有一个父视图也被点击链接时触发一个事件,它不会被e.stopImmediatePropagation();停止

相关问题