1

Backbone でカスタム イベントがどのように機能し、どのようにトリガーするかは理解していますが、関数を直接呼び出すだけでなく、いつそれらを使用するのか、どのような目的で使用するのかを理解するのに苦労しています。

例えば

var MyView = Backbone.View.extend({
    tagName: 'div',
    className: 'myview',

    initialize: function() {
        this.model.on("mycustomevent", this.doSomething, this);
    },

    doSomething: function() { 
         console.log('you triggered a custom event');
    }

});

私が間違っていなければ、doSomethingメソッドは this.model.trigger("mycustomevent")他のメソッド内で使用して呼び出すことができますが、直接呼び出すこともできますthis.doSomething()

ビューの外では、同様に呼び出すことができます

var myview = new MyView({model:somemodel});

myview.model.trigger("customevent");

myview.doSomething();

私が混乱しているのは、カスタムイベントを忘れて、必要なときにメソッドを直接呼び出すだけです。使用例は大歓迎です!

4

2 に答える 2

6

コード内のさまざまな場所に複数のハンドラーを追加したい場合があります (f.ex:

this.model.on("mycustomevent", this.doSomething, this);

// ... and somewhere else you add an anonymous function
this.model.on("mycustomevent", function() {
    console.log('do something');
});

次に、イベントをトリガーすると、すべてのハンドラーが実行されます。off個別または複数のハンドラーをアンバインド/管理するために使用することもできます。

イベント パターン (オブザーバー パターンパブリッシュ/サブスクライブなどとも呼ばれます) の一般的な説明について知りたい場合は、より詳細な記事や本を探す必要があります。

于 2012-11-26T22:19:58.883 に答える
1

バックボーンでは、完璧な例はモデルのプロパティを変更することです。関数を使用すると、次のようなことをする必要があります...

$( '#someUI' ).click( function {
   // update the model property
   myModel.someProperty = 'somethingDifferent';
   // update any ui that depends on this properties value
   $( '#uiThatDisplaysModelData' ).find( 'someSelector' ).html( 'somethingDifferent' );
   // save the model change to the server
   $.ajax( {
      url: 'somesaveurl',
      data: { someProperty: 'somethingDifferent' }
      success: callback
   } );
} );

次に、プロパティを変更するたびに、コード全体でこれらの手順を繰り返します。

バックボーンと少しのセットアップで、同じことを次の方法で実現できます。

myModel.set( 'property', 'somethingDifferent' );

changeこれは、このモデルのおよびchange:propertyイベントにハンドラーをアタッチしたためです。これらは、バックボーンによってモデル用に自動的に作成されるカスタム イベントです。したがって、コードのどの部分でもモデルを操作するたびに、DOM の更新と保存を自動的に行うことができます。入力の検証や、必要なものをこれらのカスタム イベントにバインドすることもできます。

基本的には、オブザーバー パターンをアプリケーションに適用するだけです。イベントは監視可能なオブジェクトに属し、ハンドラーはそのオブザーバーに属します。

http://en.wikipedia.org/wiki/Observer_pattern

于 2012-11-26T23:08:00.113 に答える