2016-09-12 5 views
1

メッセージング用にを使用しているJavaScriptクライアントがあります。私は動的にロードされている現在、HTMLのみで構成されたウィジェット/コンポーネントの束を持って動的JavaScriptはデータに基づいてイベントを読み込んでサブスクライブしますか?

pubnub.subscribe({ 
     channel : chnl, 
     message : function(m){ 
      var msg = $.parseJSON(m); 
      processMessage(msg); 
     } 
    ); 

:私はそうのようなチャンネルに加入しています。今のところ、processMessage()は、基本的に「メッセージIDがwidget1の場合、束をしてください」と言っています。私はコンポーネントファイルを変更して、すべてのウィジェットデータを扱うjavascriptと、PubNubメッセージがウィジェットに一致するIDを受け取ったときに検出するフックを登録する方法をいくつか含んでいます。

どうすればいいですか?

詳しくはプログラマーズ・スタック・エクスチェンジ・コムのthis questionを参照してください。

答えて

1

あなたは、単純なコールバック・マップを維持し、メッセージが入って来たときに検索を行うことができ

ような何か:。各コンポーネントで

var callbackMap = {}; 

function registerCallback(id, callback) { 
    callbackMap[id] = callback; 
} 

function processMessage(msg) { 
    callbackMap[msg.id](msg.data); 
} 

、あなたが登録します:

registerCallback('widget1', function(data) { 
    //do something for widget1 with data 
}); 

メッセージで:

pubnub.subscribe({ 
    channel: chnl, 
    message: function(m){ 
    var msg = $.parseJSON(m); 
    processMessage(msg); 
    } 
); 
+0

'processMessage()'関数をスキップして、 'callbackMap [msg]()'をpubnubリスナーから直接呼び出すことはできませんでしたか? –

+0

また、 'msg'にはペイロード全体が含まれています。コールバックをID( '' msg.id')でどのように登録すれば、データ全体( 'msg.data')にアクセスできますか? –

+0

それが私だったら、processMessage関数を公開してマップを内部に保つだけですが、違いはありません。 – aw04

関連する問題