Javascript 主干单击事件:仅在实际单击的元素上触发
在主干应用程序中,我为集合中的每个模型实例化一个视图 如果单击其中一个视图,我想调用一个函数 不幸的是,函数被调用了n次,其中n是实例化的模型/视图的数量。我通过找出点击了什么元素来解决这个问题,但知道一个事件可能在同一时刻被触发200多次,我仍然感到不舒服 这一事件注定是这样的:Javascript 主干单击事件:仅在实际单击的元素上触发,javascript,jquery,backbone.js,mouseclick-event,Javascript,Jquery,Backbone.js,Mouseclick Event,在主干应用程序中,我为集合中的每个模型实例化一个视图 如果单击其中一个视图,我想调用一个函数 不幸的是,函数被调用了n次,其中n是实例化的模型/视图的数量。我通过找出点击了什么元素来解决这个问题,但知道一个事件可能在同一时刻被触发200多次,我仍然感到不舒服 这一事件注定是这样的: var Item = Backbone.View.extend({ events: { 'click .list-group-item': function(event) { this.doS
var Item = Backbone.View.extend({
events: {
'click .list-group-item': function(event) { this.doSomething(event); },
},
doSomething: function(event) {
$(event.currentTarget).toggleClass('active');
},
});
在上面的代码中,您还可以看到我使用event.currentTarget
的变通方法,但我如何避免这种情况?是否有一种方法可以区分.list组项
元素,而无需求助于事件.currentTarget
,因此最好在单击元素时立即进行
另一种方法是将事件绑定到父元素,这样它只会触发一次,然后使用
event.currentTarget
,但这对我来说也有点可疑。因为您想在视图中的任何位置附加一个click,所以不需要指定。list group item
。此外,您只需指定事件回调函数的名称:
var Item = Backbone.View.extend({
events: {
'click': 'doSomething'
},
doSomething: function(event) {
$(event.currentTarget).toggleClass('active');
},
});
由于要附加到视图中任何位置的单击,因此无需指定
。列表组项
。此外,您只需指定事件回调函数的名称:
var Item = Backbone.View.extend({
events: {
'click': 'doSomething'
},
doSomething: function(event) {
$(event.currentTarget).toggleClass('active');
},
});
为什么实际上要在事件哈希中调用函数,而不是仅仅注册它?如果执行以下操作:
“单击.列表组项”:“doSomething”,
,则在单击单个元素之前,它不会实际运行该函数。(事件对象会自动传入)@dwenzel,否则,由于某种原因事件不会触发。但是我不知道默认情况下会传入事件
,谢谢你提供的信息!这个视图的元素是什么?是“.list组项”本身吗?如果是这样,您可能需要执行以下操作:“单击”:“doSomething”
。为了进行测试,我将把调试器作为doSomething函数定义的第一行。然后,查看您是否在单击时输入函数,并在控制台中玩event
。@dwenzel现在它工作了,只是我太笨了,谢谢提示!为什么实际上要在事件哈希中调用函数,而不是仅仅注册它?如果执行以下操作:“单击.列表组项”:“doSomething”,
,则在单击单个元素之前,它不会实际运行该函数。(事件对象会自动传入)@dwenzel,否则,由于某种原因事件不会触发。但是我不知道默认情况下会传入事件
,谢谢你提供的信息!这个视图的元素是什么?是“.list组项”本身吗?如果是这样,您可能需要执行以下操作:“单击”:“doSomething”
。为了进行测试,我将把调试器作为doSomething函数定义的第一行。然后,查看您是否在单击时输入函数,并在控制台中玩event
。@dwenzel现在它工作了,只是我太笨了,谢谢提示!