2017-01-30 3 views
0

Я создал макет приложения, чтобы проиллюстрировать ситуацию, я столкнулся: Mock AppEmber наблюдатель не работает на вложенной собственности

В этом приложении; Я создал службу с одним булевым свойством и функцией для переключения этого свойства (x); и два компонента (один для переключения свойства сервиса, другой - для наблюдения за количеством переключений и отображения его). Наблюдатель находится в toggle-observer. Он добавляется непосредственно к свойству услуги: myService.x. Код не работает как есть; однако если комментарий в строке 14 из toggle-observer.js закомментирован; наблюдатель начинает работать.

Мой вопрос в том, что мне нужно выполнить get на весь путь свойства вложенного наблюдателя, чтобы заставить его работать? Это ожидаемое поведение? Если да, может кто-нибудь объяснить, почему? Мои наилучшие пожелания.

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

ответ

1

От уголек руководства service

Введенные свойства ленивым загружены; то есть услуга не будет , созданной до тех пор, пока свойство явно не вызывается. Поэтому вам необходимо получить доступ к услугам в вашем компоненте, используя функцию get , иначе вы можете получить неопределенный.

От наводнения, unconsumed computed properties do not trigger observers. Комбинируя вышеуказанные два понятия, мы можем прийти к ниже заключение

Вы не использовали myService любого объекта внутри toggle-observer компонента так будет undefined, пока вы явно не вызовите get функцию или использовать его в шаблоне.

Если вы не используете его x объект в toggle-observer компонент, то он не будет запускать наблюдателя. Вы должны потреблять его либо в файле toggle-observer.hbs, либо в методе init.

+1

Благодарим за отзыв; действительна только часть, связанная с введенными свойствами, ленивыми; потому что у меня нет никакого неиспользуемого вычислимого свойства в моем коде. тем не менее; я бы ожидал, что код будет работать так, как есть; потому что просто получить услугу, ничего не делая с ней, исправляет дело. – alptugd

+0

Да. Ты прав. но обычно оба являются ловушками – kumkanillam

Смежные вопросы