Backbone在一个事件中触发两种方法

时间:2012-11-13 15:33:53

标签: backbone.js backbone-views backbone-events

我正在使用Backbone,我有一个定义了事件的视图:

    ....
    events: {
        'click .search-button': 'setModelTerm',
        'change .source-select': 'setModelSourceId',
        'change .source-select': 'activateSource'
    },
    ....

我希望在事件change .source-select触发时触发两种方法。问题是事件对象中的最后一个条目会覆盖前面的条目 如何在一个事件中触发两种方法?
(我试图阻止编写另一种调用这两种方法的方法)

3 个答案:

答案 0 :(得分:40)

您可以在事件的哈希中传递包装函数来调用您的两种方法。

来自http://backbonejs.org/#View-delegateEvents

  

事件以{"event selector": "callback"}格式编写。该   回调可以是视图上方法的名称,也可以是直接   功能体。

尝试

events: {
    'click .search-button': 'setModelTerm',
    'change .source-select': function(e) {
        this.setModelSourceId(e);
        this.activateSource(e);
    }
},

答案 1 :(得分:4)

唯一阻止你添加相同事件/选择器对的是events是一个散列--jQuery可以处理对同一个元素/事件对的多个绑定。好消息是,jQuery事件允许您通过添加.myNamespace后缀来命名事件。实际上,这会产生相同的结果,但您可以生成许多不同的密钥。

var MyView = Backbone.View.extend({
  events: {
    'click.a .foo': 'doSomething',
    'click.b .foo': 'doSomethingElse'
    'click.c .foo': 'doAnotherThing', // you can choose any namespace as they are pretty much transparent.
  },

  doSomething: function() {
    // ...
  },

  doSomethingElse: function() {
    // ...
  },

  doAnotherThing: function() {
    // ...
  },
});

答案 2 :(得分:2)

您视图中的事件哈希只是一种方便的“DSL”。只需在initialize内手动绑定您的第二个事件。

events: {
    'click .search-button': 'setModelTerm'
},
initialize: function () {
    _.bindAll(this);
    this.on('click .search-button', this.doAnotherThing);
}