【问题标题】:Ember observer not working on nested propertyEmber 观察者不处理嵌套属性
【发布时间】:2017-06-15 17:49:43
【问题描述】:

我创建了一个模拟应用程序来说明我所面临的情况:Mock App

在这个应用程序中;我创建了一个具有单个布尔属性的服务和一个切换该属性的函数 (x);和两个组件(一个用于切换服务的属性;另一个用于观察切换次数并显示它)。观察者位于toggle-observer。它直接添加到服务的属性中:myService.x。代码没有按原样工作;但是,如果 toggle-observer.js 第 14 行的注释被注释掉;观察者开始工作。

我的问题是,我是否需要对嵌套观察者属性的整个路径执行 get 才能使其正常工作?这是预期的行为吗?如果是这样,有人可以解释为什么吗?我最好的问候。

注意:这是一个模拟示例来说明案例;它与我在真实应用程序中设计的任何内容无关。我尽量避开观察者;但是我在尝试某事时遇到了这种情况。并决定问它。

【问题讨论】:

    标签: ember.js observers


    【解决方案1】:

    来自 ember 指南 service

    注入的属性是延迟加载的;意味着该服务将不会 实例化,直到显式调用该属性。因此你 需要使用 get 函数访问组件中的服务 否则你可能会得到一个未定义的。

    来自 ember 指南,unconsumed computed properties do not trigger observers。 结合以上两个概念,我们可以得出以下结论,

    您没有使用myService 组件内的任何toggle-observer 属性,因此它将是undefined,直到您显式调用get 函数或在模板中使用它。

    除非你在toggle-observer 组件中使用x 属性,否则它不会触发观察者。您需要在 toggle-observer.hbs 文件或 init 方法中使用它。

    【讨论】:

    • 感谢您的回复;只有与注入属性相关的部分是惰性的;因为我的代码中没有任何未使用的计算属性。尽管如此;我本来希望代码按原样工作;因为只是获得服务而不做任何事情就可以解决问题。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多