20

バックボーンを使用していて、イベントが定義されたビューがあります。

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

イベントが発生したときに2つのメソッドをトリガーしたいと思いchange .source-selectます。問題は、イベントオブジェクトの最後のエントリが前のエントリを上書きすることです。
1つのイベントで2つのメソッドをトリガーするにはどうすればよいですか?
(私はこれらの2つのメソッドを呼び出す別のメソッドを書かないようにしています)

4

3 に答える 3

42

イベントのハッシュにラッパー関数を渡して、2 つのメソッドを呼び出すことができます。

http://backbonejs.org/#View-delegateEventsから

イベントは の形式で記述されます{"event selector": "callback"}。コールバックは、ビューのメソッドの名前か、直接の関数本体のいずれかです。

試す

events: {
    'click .search-button': 'setModelTerm',
    'change .source-select': function(e) {
        this.setModelSourceId(e);
        this.activateSource(e);
    }
},
于 2012-11-13T15:57:53.157 に答える
7

同じイベント/セレクターのペアを追加することを妨げている唯一のものは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() {
    // ...
  },
});
于 2016-04-20T16:56:51.060 に答える
1

ビュー内のイベント ハッシュは、ある種の便利な「DSL」にすぎません。2 番目のイベントを手動でバインドするだけinitializeです。

events: {
    'click .search-button': 'setModelTerm'
},
initialize: function () {
    _.bindAll(this);
    this.on('click .search-button', this.doAnotherThing);
}
于 2012-11-13T15:42:54.410 に答える