jquery でオブザーバー パターンを実装する例をインターネットで探しています。
私はそれをこのようにしたいと思います
observer1.observe(subject);
observer2.observe(subject);
オブザーバーのカスタム イベント コールバックをいくつか定義する
observer1.bind('customEvent', function(contextData) {
//Some code
});
observer1.bind('anotherCustomEvent', function(contextData) {
//Some code
});
observer2.bind('customEvent', function(contextData) {
//Some code
});
次の行は、両方のオブザーバーの customEvent コールバックをトリガーします。
subject.trigger('customEvent', contextData);
次の例では、observer2 にはカスタム イベントがバインドされていないため、observer1 でのみ anotherCustomEvent が発生します。
subject.trigger('anotherCustomEvent', contextData);
インターネット上のガイドはより一般的です。
$( document ).on( "topicName" , function () {
//..perform some behaviour
});
$( document ).trigger( "topicName" );
( http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjqueryの例) 探しているものを達成するために上記のコードを使用する方法がわかりません。
このようにする必要があります(上記の例のように保つ場合):
$(document).on("customEvent", function () {
observer1.trigger("customEvent");
observer2.trigger("customEvent");
});
$(subject).click(function() {
$(document).trigger("customEvent");
});
または少し良い:
$(subject).click(function() {
observer1.trigger("customEvent");
observer2.trigger("customEvent");
});
いずれにせよ、オブザーバーにサブジェクトにサブスクライブするように指示する代わりに、subject-click-callback または document-customEvent-callback を編集する必要があることに行き詰まっています。
オブザーバーのパターンを誤解していますか、それとも探しているものを達成する方法はありますか?
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript Publish/Subscribe パターンについては、その章の少し下の方で言及しています。それは私の方法かもしれませんが、例の背後にあるコードがありません。