$.when()
コールバックが1回実行された後、単一のイベントの代わりに.done()
jQueryを使用するのと同様に、jQueryを「バインド解除」する方法を探しています。この状況でイベントの代わりに遅延オブジェクトを使用している理由は、コールバックを実行する前に、複数の非同期プロセスが完了するのを待つ必要があるためです。.one()
.on()
詳細を説明するために、各ページのモデルとビューがあるバックボーンアプリケーションに取り組んでいます。新しいページを表示するシーケンスは次のようになります。
- 着信ページ(ページAと呼びます)のビューは、レンダリングするように指示されます
$.when()
非同期プロセス(3、4、5)が解決するのを待つためにページAによって使用されます- ページAのデータがサーバーから読み込まれ、モデルにデータが入力されます
- ページAのモデルの画像はプリロードされています
- 前のページ、ページB、終了が終了しました(アニメーションが完了しました)
- ページAがレンダリングされます
これは、ユーザーが各ページに1回だけアクセスするという架空のシナリオで正常に機能します。ただし、ページは明らかに繰り返しアクセスされる可能性があります。つまり、ユーザーがWebサイトの他の場所に移動した後、ページBを開いたり閉じたりすると、その.close()
メソッドの完了に関連する遅延オブジェクトがもう一度解決され、のコードブロックが実行されます。.done()
ページAのメソッドのコールバック.render()
。これは適切ではありません。
理想的には、コードブロックは、一度実行されるとすぐに、または他の多くのイベントリスナーがバインド解除されるのと同じように、各ページ$.when().done()
のメソッドで「バインド解除」されます。.close()
これが可能かどうかはわかりませんが、ここでやろうとしていることを達成するための代替方法があるのではないでしょうか。たぶん、彼らは延期されたものを捨てて、複数のイベントが発生するのをリッスンするパスですか?
ありがとう。