我创建了一个模拟应用程序来说明我面临的情况:Mock App
在此申请中;我创建了一个具有单个布尔属性的服务和一个用于切换该属性的函数(x
);和两个组件(一个用于切换服务的属性;另一个用于观察切换次数并显示它)。观察者在toggle-observer
。它直接添加到服务的属性中:myService.x
。代码不能正常工作;但如果toggle-observer.js
第14行的评论被注释掉了;观察者开始工作。
我的问题是,我是否需要对嵌套的观察者属性的整个路径执行get
才能使其正常工作?这是预期的行为吗?如果是这样,有人可以解释原因吗?我最诚挚的问候。
注意:这是一个用来说明案例的模拟例子;它与我在真实应用程序中设计的任何内容无关。我试图尽可能地避开观察者;但是我在尝试时遇到了这种情况。并决定问它。
答案 0 :(得分:2)
来自ember guide service
注入的属性是延迟加载的;意思是服务不会 实例化,直到显式调用该属性。所以你 需要使用get函数访问组件中的服务 否则你可能会得到一个未定义的。
来自余烬指南,unconsumed computed properties do not trigger observers。 通过结合上述两个概念,我们可以得出以下结论,
您尚未在myService
组件中使用toggle-observer
任何属性,因此在明确调用undefined
函数或在模板中使用它之前,它将为get
除非您在x
组件中使用toggle-observer
属性,否则它不会触发观察者。您需要在toggle-observer.hbs文件或init
方法中使用它。