« HTML要素の取得 | トップページ | ブラウザのバックボタン/履歴への対応 »

2007年3月21日 (水)

publish/subscribe

異なるメソッド間で連携する手段として、publish/subscribeメソッドが用意されている。publish/subscribeを用いた場合、共通のtopic名を指定することで、直接やり取りする相手を明示せずに呼び出すことができる。 topic名を指定してpublishを実行すると、同じtopic名を指定して実行しているsubscribeメソッドが呼ばれる。同じtopic名に対してsubscribeされる先は複数設定できる。

subscribeを実行するときは、topic名以外に、同じtopic名でpublishが実行されたときに実行されるオブジェクトとそのメソッド名を指定する。 publishを実行するときは、topic名と、subscribeで指定したオブジェクトのメソッドが実行されるときに渡す値を指定する。

var foo = new function() {
    this.init = function() {
        dojo.event.topic.subscribe("/mytopic", this, processMessages);
    }

    function processMessages(message) {
        alert("Message: " + message.content);
   }
}

var bar = new function() {
    this.showMessage = function(message) {
        dojo.event.topic.publish("/mytopic", {content: message});
    }
}

foo.init();
bar.showMessage("Hello Dojo Master");

同じオブジェクト内の

上記の例では、topic名として "/mytopic"を指定して、publish/subscribeが実行されている。 foo.init()によりsubscribeがまず実行された後、bar.showMessageによりpublishが実行され、subscribeの実行時に指定したオブジェクトのメソッドが呼ばれる。

publishを実行したとき、contentプロパティの値としてshowMessageが呼ばれたときの引数を指定している。 subscribeで指定したprocessMessagesメソッドでは、引数オブジェクトのcontentプロパティとして値を受け取っている。

« HTML要素の取得 | トップページ | ブラウザのバックボタン/履歴への対応 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/232684/5768532

この記事へのトラックバック一覧です: publish/subscribe:

« HTML要素の取得 | トップページ | ブラウザのバックボタン/履歴への対応 »