0

$.when()コールバックが1回実行された後、単一のイベントの代わりに.done()jQueryを使用するのと同様に、jQueryを「バインド解除」する方法を探しています。この状況でイベントの代わりに遅延オブジェクトを使用している理由は、コールバックを実行する前に、複数の非同期プロセスが完了するのを待つ必要があるためです。.one().on()

詳細を説明するために、各ページのモデルとビューがあるバックボーンアプリケーションに取り組んでいます。新しいページを表示するシーケンスは次のようになります。

  1. 着信ページ(ページAと呼びます)のビューは、レンダリングするように指示されます
  2. $.when()非同期プロセス(3、4、5)が解決するのを待つためにページAによって使用されます
  3. ページAのデータがサーバーから読み込まれ、モデルにデータが入力されます
  4. ページAのモデルの画像はプリロードされています
  5. 前のページ、ページB、終了が終了しました(アニメーションが完了しました)
  6. ページAがレンダリングされます

これは、ユーザーが各ページに1回だけアクセスするという架空のシナリオで正常に機能します。ただし、ページは明らかに繰り返しアクセスされる可能性があります。つまり、ユーザーがWebサイトの他の場所に移動した後、ページBを開いたり閉じたりすると、その.close()メソッドの完了に関連する遅延オブジェクトがもう一度解決され、のコードブロックが実行されます。.done()ページAのメソッドのコールバック.render()。これは適切ではありません。

理想的には、コードブロックは、一度実行されるとすぐに、または他の多くのイベントリスナーがバインド解除されるのと同じように、各ページ$.when().done()のメソッドで「バインド解除」されます。.close()

これが可能かどうかはわかりませんが、ここでやろうとしていることを達成するための代替方法があるのではないでしょうか。たぶん、彼らは延期されたものを捨てて、複数のイベントが発生するのをリッスンするパスですか?

ありがとう。

4

1 に答える 1

0

内部的に、jQuery は多くのメソッドで「コールバック」キューを使用して、複数の関数 (イベント ハンドラーなど) の追加/削除/起動を管理します。

これらのキューのコンストラクターは として公開され$.Callbacks(flags)ます。フラグ「once」、「memory」、「unique」、および「stopOnFalse」を利用して、起動時のキューの詳細な動作を制御できます。詳細はこちらをご覧ください

「訪問」と「繰り返し訪問」の性質が何であるかはわかりませんが、javascript の状態が持続していると仮定します。そうでなければ、問題はありません。次のようなものが必要だと思います:

//First let's assume you have three promises, corresponding to your steps 3,4,5
var promiseA = .....;
var promiseB = .....;
var promiseC = .....;

//Then you need one or more worker functions
function myFunction() {
    //do whatever is necessary when promises A,B,C are all resolved.
}

//Create a Callbacks queue with the 'once' flag
var callbacks = $.Callbacks('once');//'once' ensures the callback list can only be fired once.
callbacks.add(myFunction);
//add further callback functions here if necessary.

//Now the glue that puts it all together.
$.when(promiseA, promiseB, promiseC).done(callbacks.fire);

//Or, if you need to pass any paramters to the callback function:
$.when(promiseA, promiseB, promiseC).done(function() {
    callbacks.fire(...);
});
于 2012-12-26T22:38:11.627 に答える