Javascript 主干单击事件:仅在实际单击的元素上触发

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

在主干应用程序中,我为集合中的每个模型实例化一个视图

如果单击其中一个视图,我想调用一个函数

不幸的是,函数被调用了n次,其中n是实例化的模型/视图的数量。我通过找出点击了什么元素来解决这个问题,但知道一个事件可能在同一时刻被触发200多次,我仍然感到不舒服

这一事件注定是这样的:

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现在它工作了,只是我太笨了,谢谢提示!