1

これが私が持っているコードです:

var criterion = _.extends({},Base);

criterion.dispatcher.on('save',this.saveIt,this); //respond to event save. 

criterion.saveIt = function(){
 if(this.hasChanged())
   this.save({success:this.saveSuccess, error:this.saveError}); //method in Base 
 else
   dispatcher.trigger('done');
};

criterion.saveSuccess = function() {
 //do something
 dispatcher.trigger('done');
};

criterion.saveError = function() {
 //do something
 dispatcher.trigger('done');
};

dispatcher.trigger('done')for ajax 固有の項目で終わる関数がかなりあります。これは、Web アプリのプログレス バーを更新するために使用されdoneます。すべての要素からイベントを受信した後、成功またはエラー、または既に新しい状態になったときにカウント ダウンします。カウンターは決定論的であるため、アイテムの数によってカウントアップし、done受信した の数によってカウントダウンします。

質問:dispatcher.trigger('done')各関数の最後に繰り返される呼び出しを削除するより良い方法はありますか? それとも必要悪か。いわば「次のステップ」の実行を同期するためだけに、さまざまなオブジェクトにそのようなコードがあります(「同期バリア」と考えてください)。

4

1 に答える 1

1

呼び出しを自動的に追加するメソッドを作成できます。

criterion.addProgressMethod = function( methodName, method ) {
   criterion[methodName] = function() {
      method();
      dispatcher.trigger('done');
   }
};

// usage

criterion.addProgressMethod( 'saveSuccess', function() {
   // do something here
} );

これがあなたが持っているものよりも優れているかどうかはわかりませんが、それはアイデアです.

于 2012-08-09T19:26:41.583 に答える