Ember.js:在服务的把手中使用计算的 属性

Ember.js: Using a computed property in handlebars from a Service

所以我在 component.js 中计算了 属性:contexts: Ember.computed.oneWay('myService.contexts'),

而且我能够从另一个操作中获取内容

 openHelp(){
      console.log(this.get('contexts'))
      alert(this.get('contexts'))
    }
  }

但是当我尝试在 Handlebars ({{contexts}}) 中使用计算的 属性 时,它只是空白。

我为这个问题创建了一个 Ember Twiddle:https://ember-twiddle.com/38de64d58dcf3298df6d4176f15cbc0e?openFiles=components.my-component-help.js%2Ctemplates.components.my-component-help.hbs

如果我有一个数组 foo: [ 'foo','bar'] 并且我执行 {{foo}} 它会在把手中输出。但是,如果我使 foo 计算 属性 从 [ 'foo','bar'] 获得并执行 {{foo}} 我什么也得不到。

解决方法如下:https://ember-twiddle.com/e9c2ef05e27013a389e0b2bfdaec3d40?openFiles=services.my-service.js%2Ctemplates.components.my-component-help.hbs

有两个问题:

  1. contexts 是一个数组。当您 console.logalert 它时,那些方法在某些浏览器内部 JSON.stringify 该对象为您提供方便。 Ember 不会那样做。您需要自己格式化数组,或者像我一样,each 覆盖它。出于调试目的,请随意使用 log 助手。

  2. 数组上的计算属性正在通过 Ember 的方法(例如 pushObjectremoveObject 观察数组变化。简单地使用 pushsplice 不会更新计算的 属性.

无法评论上面的正确答案,因为我没有足够的声誉,但我想在与 Ember 的可观察方法相关的文档中添加 link对于枚举:

https://guides.emberjs.com/v2.5.0/object-model/enumerables/