RequireJS - межмодульная связь - PullRequest
1 голос
/ 29 марта 2012

В настоящее время я использую посредник, который находится между всеми моими модулями и позволяет им обмениваться данными друг с другом.Все модули должны проходить через посредника, чтобы отправлять сообщения всем, кто слушает.Я читал на RequireJS, но не нашел документации, как лучше всего облегчить связь между модулями.

Я смотрел на сигналы, но если я правильно понимаю, сигналы не очень полезны, есливы управляете вещами через посредника.Мне просто интересно, что еще я могу попробовать.Я весьма заинтересован в использовании какого-либо шаблона обратного вызова, но не получил ничего более сложного, чем простая таблица поиска в посреднике.

Вот реализация сигнала, которую я нашел: https://github.com/millermedeiros/js-signals

Вот еще кое-что, что я нашел: http://ryanflorence.com/publisher.js/

Есть ли стандартизированный подход к этой проблеме или все должно быть зависимым?

Ответы [ 2 ]

3 голосов
/ 22 мая 2012

Вот кое-что, что вы можете попробовать: https://github.com/naugtur/overlord.js

Это может сделать немного больше, чем обычный издатель или посредник.Это позволяет создать общий API для доступа к любым методам любых модулей.

Это своего рода бесстыдный штекер, потому что это мой собственный инструмент, но, похоже, он весьма актуален для вопроса.

Добавлена ​​поддержка require.js

3 голосов
/ 29 марта 2012

Использование централизованного менеджера событий - довольно распространенный и довольно масштабируемый подход. По вашему вопросу трудно сказать, какие проблемы, если они есть, возникают у вас с моделью событий. Типичная вещь выглядит следующим образом (с помощью издателя):

Файл 1:

require(['publisher','module1'],function(Publisher,Module1) {
    var module = new Module1();
    Publisher.subscribe('globaleventname', module.handleGlobalEvent, module);
});

Файл 2:

require(['publisher','module2'],function(Publisher,Module2) {
    var module = new Module2();
    module.someMethod = function() {
        // method code
        // when method needs module1 to run its handler
        Publisher.publish('globaleventname', 'arguments', 'to', 'eventhandlers');
    };
});

Основным преимуществом здесь является слабая связь; вместо того, чтобы объекты знали методы других объектов, объекты могут вызывать события, а другие объекты знают, как обрабатывать это конкретное состояние приложения. Если объект, который обрабатывает событие, не существует, ошибка не выдается.

Какие у вас проблемы с этим подходом?

...