2013-10-10 5 views
1

У меня проблема с PubSub в Javascript. im пытается выяснить, почему $ .subscribe не печатает значение. Я предполагаю, что это связано с объемом между $ .publish и $ .subscribe.Javascript PubSub Scope Issue

Я бы хотел, чтобы другие модули подписывались на мероприятие. как бы я это сделал? я положил пример на 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"); 
}); 

спасибо

Pete

+1

Ваш тест вызывает ваш «публиковать» API * до *, он устанавливает любые подписки. – Pointy

+0

Кроме того, в вашем примере нет ключевого слова 'new'. Вы не создаете объект из конструктора, просто вызываете функцию. – rescuecreative

ответ

1

Вы создали систему, которая использует JQuery обработку событий для передачи сообщений, которая не в сама плохая идея. Если вы ожидаете, что он сохранит события, которые были инициированы, и сообщит их следующим «подписчикам», однако вы сделали неверное предположение о семантике механизма событий. Если дерево падает в лес, лес не сохраняет звук до тех пор, пока ваша походная вечеринка не прибудет. Точно так же событие, которое запускается без прослушивателей, просто забыто.

Если вы переместите свой код, который создает «MQ» до после, подписка завершена, тогда она отлично работает.

+0

http://jsfiddle.net/Fvk2G/1/. Добро пожаловать –

+0

@KonstantinK спасибо :) Я тоже это сделал, но я не стал его сохранять. – Pointy