Durandal Event в виджетах

Итак, у меня есть еще один вопрос по DurandalJS. Итак, у меня есть несколько виджетов, которые в значительной степени автономны. Они отображают или скрывают себя в зависимости от того, вошел ли текущий пользователь в систему или нет, например. У меня есть виджет, который отображает имя текущего пользователя, и еще один, который отображает некоторые настройки для текущего пользователя. «Текущий пользователь» — это значение, хранящееся в локальном хранилище, поэтому каждый в основном знает, как получить его оттуда и внести свой вклад.

У меня есть модуль безопасности, который запускает событие, когда пользователь входит в систему и когда пользователь выходит из системы.

Все мои виджеты, включая оболочку, требуют этого модуля безопасности, и все они обрабатывают событие. Теперь я знаю, что событие работает, потому что вызывается обработчик событий оболочки, но виджеты никогда не видят событие, даже если они отображаются в оболочке.

Однако, если я делаю жесткое обновление страницы (независимо от того, вошел ли пользователь в систему или нет), все виджеты отображаются правильно, поэтому я знаю, что виджеты знают, что делать. Я делаю это неправильно? Если да, то как мне лучше поступить.

Спасибо


person Obi    schedule 30.10.2013    source источник
comment
Предполагая, что модуль безопасности возвращает синглтон, это звучит как жизнеспособный подход. Некоторые примеры см. в спецификациях тестов событий github.com /BlueSpire/Дюрандаль/blob/master/test/specs/   -  person RainerAtSpirit    schedule 30.10.2013
comment
Привет, да, он возвращает синглтон, я думаю, проблема была в том, что я также возвращал синглтоны из своих виджетов. Я понятия не имею, в чем разница, но я никогда не получал события, когда возвращал синглтоны. Я изменил их на функции, и снова все в порядке с миром :)   -  person Obi    schedule 30.10.2013
comment
Durandal ожидает, что виджеты будут функциями конструктора durandaljs.com/documentation/Creating-A-Widget чтобы он мог создавать несколько виджетов одного типа, например, виджет ячейки (td). Не могли бы вы ответить на свой вопрос и принять его через пару дней.   -  person RainerAtSpirit    schedule 30.10.2013
comment
Сделаю, спасибо за помощь.   -  person Obi    schedule 31.10.2013


Ответы (1)


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

viewmodel.js — это экспортируемый модуль функции, который будет служить местом для всего кода вашего виджета. Он будет привязан к view.html инфраструктурой виджетов через модуль композиции.

person Obi    schedule 31.10.2013