私はjavascript(jQueryを使用)で非常に重いコンサートカレンダーを作成しています。アプリ全体でさまざまなイベントを同期させるのに問題があります。これを行う方法の提案を探しています。Javascriptイベント同期
簡単な使用例例:
-
:
- ユーザーが
- カレンダーは、その月
- ユーザーはアーティストを選択します
- カレンダーは彼
- カレンダーが
- カレンダーは、そのアーティストのショー(複数可)を強調してその月にスキップし、そのアーティストの最初のショーの日
より複雑なユースケースの一例にスキップ月にクリックします
一つ時折問題は、新しい月がまだ私がしようとした時間によってレンダリングされていないということですアーティストのショーをハイライトする。したがって、これらの関数が順番に呼び出されても、ショーは強調表示されません。明らかに、setTimeout()を使用することはかなりハッキーであり、動作することは保証されていません。
まず最初に、次の機能が順不同で実行されることは可能ですか(Chromeでも)。
function steps(){
stepOne(); //TAKES 30 SECONDS
stepTwo(); //TAKES < 1 SECOND
}
第二に、関連する簡単な質問:
If placed at the end of a function, will a JS callback ALWAYS run after everything else in the given function has finished running?
もしそうなら、私でし巣その前の関数のコールバックとして機能します。しかし、いろいろなユースケースを考慮すれば、それは扱いにくくなるでしょう。私は、これはすべての機能が順に呼ばれていることを確認想像
1) Allow each function an optional callback parameter. If it's present, call it at the very end of the function. 2) During a UI refresh, create an array, and stack any functions to be called within this array. 3) Once this "script" is completed, iterate through the array, calling each function in the order it was added, using the next function as the previous function's callback.
:
は、ここで私が検討しているアプローチです。
別のアプローチは、
$(document).bind("listener.name", fnCallback);
を使用してイベントリスナーを添付し、そのイベントが発生するたびに
$(document).trigger("listener.name");
を呼び出すことです。
しかし、さまざまなイベントがユースケースに応じて異なる関数セットを呼び出す必要があると考えられるので、これは扱いにくいものと思われます。私はいつもそこに新しいイベントを追加する前に
$(document).unbind("listener.name");
を呼び出すことができますが、再び - 私は最初のアプローチで示唆されているように、マスター「スクリプト」のようなものを作成するに傾いています。
これはあまりあいまいではありません - ご意見はありますか?さまざまなイベントを同期させなければならない複雑なUIの経験
おかげで非常に多く、
マイケル
を見ても、私は、これはそれがjQueryの規則に従っていることを良い点だと思います。しかし、私はタイムアウトを1msに設定すると、これまでになかったことが働くようになる時があることが分かりました。それは私にとって意味をなさない(JS呼び出しが真に非同期呼び出しを除いて真に実行されるならば)、それは私が今生きていかなければならないハックだ。ありがとう、みんな - すべてのアドバイスは非常に感謝:) – marclar
私はコードが身近に見えたと思った! :) – DMCS