2013-10-10 88 views
1

即時通訊與JavaScript中的PubSub存在問題。 即時試圖找出爲什麼$。訂閱不打印的價值。我認爲它的範圍在$ .publish和$ .subscribe之間。Javascript PubSub範圍問題

我想有其他模塊訂閱該事件。我會怎麼做? 我穿上的jsfiddle一個例子:

http://jsfiddle.net/Fvk2G/

window.MQ = (function (window, document, undefined) { 

    "use strict"; 

    function MQ() { 

     testPubSub(); 

     function testPubSub() { 
      $.publish("test"); 
     } 
    } 

    return MQ 

})(this, this.document); 

var mq = new MQ(); 

$.subscribe("test", function() { 
    console.log("print value"); 
}); 

感謝

皮特

+1

您的測試在設置任何訂閱之前調用您的「發佈」API *。 – Pointy

+0

另外,在你的例子中不需要'new'關鍵字。你不是從構造函數構建一個對象,只是調用一個函數。 – rescuecreative

回答

1

你已經設置了一個使用jQuery的事件處理中繼消息的系統,這是不是在本身是一個壞主意。但是,如果您期望它能保存觸發的事件並將它們報告給後續的「訂閱者」,那麼您對事件機制的語義做出了不正確的假設。如果一棵樹落在森林裏,森林在你的遠足派對到來之前不會保留聲音。同樣,一個沒有聽衆觸發的事件就被遺忘了。

如果您在之後將創建「MQ」的代碼移動到訂閱完成,那麼它工作正常。

+0

http://jsfiddle.net/Fvk2G/1/。不客氣 –

+0

@KonstantinK謝謝:)我也是這樣做的,但我沒有費心去保存它。 – Pointy