Backbone.js 触发一个事件中的两种方法

whlutmcx  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(111)

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

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

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

bjp0bcyl

bjp0bcyl1#

您可以在事件散列中传递一个 Package 函数来调用这两个方法。
来自http://backbonejs.org/#View-delegateEvents
事件以{"event selector": "callback"}的格式编写。回调可以是视图上的方法名,也可以是直接的函数体。
尝试

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

iyr7buue2#

唯一的问题是events是一个hash - 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() {
    // ...
  },
});
r9f1avp5

r9f1avp53#

视图中的事件散列只是一种方便的“DSL”。只需在initialize中手动绑定第二个事件即可。

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

相关问题