Задать вопрос
vinilzen
@vinilzen

Как грамотнее разделить общение между взаимозависимыми модулями js приложения?

Доброе время суток всем,
Как грамотнее разделить общение между взаимозависимыми модулями js приложения?

Например есть модуль1 шаблонов, который их загружает и сохраняет изменения в них. И хотелось бы сделать отдельный модуль2 для выбора шаблона из списка (с сортировками - фильтрами).
Как лучше передать через песочницу информацию о загруженных шаблонах для работы фильтров и тд. При большом количестве модулей песочница будет захламлена вызовами типо:
Sandbox = {
    init: ....
    showTemplateFilter: function() {
        var templates = App.Module1.getTemplates();
        App.Module2.showTemplateFilter(templates);
    }
    ....
}

Заранее спасибо
  • Вопрос задан
  • 3139 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
fornit1917
@fornit1917
Если я правильно понял вопрос, то в js для взаимодействия между модулями можно использовать событийно ориентированный подход.

Допустим у вас есть объект Events для работы с событиями. У него есть функция setListener(eventName, eventHandler), где eventName - название события, а eventHandler - функция-обработчик. В одном из модулей вы можете подписаться на событие.

В Events есть так же функция trigger(eventName, data), которая вызывает все обработчики, подписанные на события eventName, передавая им параметр data. В другом модуле вы соответственно вызываете эту функцию, и если какие-то другие модули подписывались на эти события - будут вызваны их обработчики.

С одной стороны подход очень гибкий и удобный, достаточно широко используется. С другой стороны бывают трудности: не всегда очевидно, что и почему вызывается.
Ответ написан
Комментировать
Дополняя ответ выше, дам ссылку на презентацию Яндекса по этому вопросу.
Думаю многое стане более понятно насчёт событий.
http://tech.yandex.ru/events/yasubbotnik/chlb-feb-2012/talks/154/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы