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

Nao*_*aor 17 backbone.js backbone-events backbone-views

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

    ....
    events: {
        'click .search-button': 'setModelTerm',
        'change .source-select': 'setModelSourceId',
        'change .source-select': 'activateSource'
    },
    ....
Run Code Online (Sandbox Code Playgroud)

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

nik*_*shr 41

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

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

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

尝试

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

  • 我特意写了!"我试图阻止编写另一种调用这两种方法的方法". (2认同)

Ken*_*lis 5

阻止您添加相同事件/选择器对的唯一方法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() {
    // ...
  },
});
Run Code Online (Sandbox Code Playgroud)

  • 这改变了生活 (2认同)