为什么我不能在Backbone的View事件中的一个语句中将单个事件绑定到多个选择器?

时间:2016-07-09 22:31:32

标签: javascript backbone.js backbone-events

我有以下Backbone View:

var View = Backbone.View.extend({
    events: {
      'change [name="title"], change [name="body"]': 'onChangeEvent'
    },

    onChangeEvent: function (e) {
       // fires only for change [name="title"] event
    }
});

我需要将onChangeEvent方法绑定到change [name="title"]change [name="body"]个事件。但onChangeEvent方法仅针对change [name="title"]事件调用,但不针对change [name="body"]调用。

请帮助我,我做错了什么?

1 个答案:

答案 0 :(得分:3)

来自fine manual

  

delegateEvents delegateEvents([events])
  [...]事件以{"event selector": "callback"}格式撰写。

所以有问题的事件是events对象中键的第一个以空格分隔的组件。将其应用于您所拥有的内容会将'change'作为事件,将[name="title"], change [name="body"]作为选择器;此外,逗号是multiple selector,因此您的选择器(如Backbone所看到的)正在查找包含name="title"属性或<change>元素且具有name="body"属性的内容。您没有任何<change>元素,但确实有name="title"个元素,因此会触发您正在看到的事件。

您可以将一个事件条目与多个选择器一起使用:

events: {
  'change [name="title"], [name="body"]': 'onChangeEvent'
  // -------------------^ but no extra 'change'
}

或两个单独的事件条目:

events: {
  'change [name="title"]': 'onChangeEvent',
  'change [name="body"]' : 'onChangeEvent'
}