2013-10-10 91 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