16

Backbone Marionette では、トリガーとイベントを使用して非常によく似たことができます。

トリガー:

return Marionette.Layout.extend({
    triggers: {
        'click .something': 'view:handleClickSomething'
    },

    initialize: function(){
        this.bindTo(this, 'view:handleClickSomething', this.handleClickSomething);
    },

    handleClickSomething: function(){}
}

対イベント:

return Marionette.Layout.extend({
    events: {
        'click .something': 'view:handleClickSomething'
    },

    handleClickSomething: function(ev){}
}

イベントの方法は、より迅速で簡単な方法のように思えますが、実際のイベント自体を簡単に取得することもできます (イベントは自動的に渡されるため)。どちらか一方を使用する理由はありますか?使用目的は何ですか? これに関する多くの情報をオンラインで見つけるのに苦労しています(注釈付きのソースを理解しようとする以外に)...

(私はイベントメソッドを発見したばかりで、それが唯一の方法だと思っていたので、今まですべてにトリガーを使用してきました)

4

2 に答える 2

15

最初の例は、トリガーの不適切な使用です。トリガーは、ビューからイベントをトリガーするためのショートカットであるため、イベントをトリガーしたビューではなく、外部オブジェクトがイベントをキャッチできます。

http://lostechies.com/derickbailey/2012/05/15/workflow-in-backbone-apps-triggering-view-events-from-dom-events/

于 2012-10-29T20:12:34.680 に答える
5

eventsと の両方をtriggersJavascript オブジェクトと考えると、違いは次のとおりです。

イベントの例:

events: {
    'click hi': 'alertTitle',
},

alertTitle: function () {
    alert('Title!!');
}

各イベントで、キー ( 'click h1') は常に DOM イベントと jQuery セレクターであり、値 ( 'alertTitle') は常にビュー内に存在するコールバック関数の名前です。

トリガーの例:

triggers: {
    'click h1': 'alert:title'
},

各トリガーでは、キーは引き続き DOM イベントと jQuery セレクターですが、値 ( 'alert:title') は常に、トリガーする新しいイベントの名前です。そのイベント ハンドラーは、必ずしも現在のビュー内ではなく、どこでも定義できます。

トリガーは次の場合に役立ちます。

  1. コールバック関数を呼び出す代わりに、DOM イベントで Marionette イベントを発生させたい場合。
  2. Marionette イベントのハンドラーを、現在のビューの外部 (親ビューなど) に配置する必要があります。この場合、このビューの親は、このイベントonChildviewAlertTitle()を処理する関数を持つことができます。alert:title
于 2016-10-02T01:14:17.577 に答える