を実行$(element).on('customevent',function(){});
すると、 をバインドするすべての要素customevent
もトリガーされます。これはおおよそ Pub/Sub として機能し、順序や優先度はないようです。私がやりたいことは、独自のコールバック キューを実装することですが、優先度を調整できます (Wordpress のように、フックの優先度を設定できます)。したがって、数値が大きいほど優先度が高くなり、数値 0 は一般的で最後に実行されます。
と の例を考える$(element).on_priority(10, 'customevent', function(){});
と$(element).on_priority(0, 'customevent', function(){});
、10
優先度は同じものを 最初に実行し、優先度イベントcustomevent
の実行をキャンセルする場合とキャンセルしない場合があります。0
どうすればそれを実装できますか? コールバックの流れを視覚化しようとするとうまくいきません
これまでのところ、私は次のように考えていました。
- すべてのコールバック名が設定された「グローバル」(クロージャ内) オブジェクトを保持します。
- コールバックの各メンバー内で、すべての優先度を含むオブジェクト。
var callbacks = {
'customevent': {},
'customevent2': {
0: [{element: $element, fn: function(), data:{}}, {element: $element, fn: function(), data:{}}],
10: [{element: $element, fn: function(), data:{}}],
20: [{element: $element, fn: function(), data:{}}]
}
};
正しい方向ですか?パフォーマンスに関しては、それほどヒットするべきではありません。問題は、オブジェクトを何度も繰り返すことです。これの問題は、以前に設定したイベントの登録を解除したり、各優先度内のコールバック配列の順序を設定 (または並べ替え) できないことです。