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

Posted

技术标签:

【中文标题】Ember.js:在服务的把手中使用计算属性【英文标题】:Ember.js: Using a computed property in handlebars from a Service 【发布时间】:2016-08-13 13:31:14 【问题描述】:

所以我的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 ,我将一无所获。

【问题讨论】:

【参考方案1】:

这里是解决方案:https://ember-twiddle.com/e9c2ef05e27013a389e0b2bfdaec3d40?openFiles=services.my-service.js%2Ctemplates.components.my-component-help.hbs

有两个问题:

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

    数组上的计算属性通过 Ember 的方法(例如 pushObjectremoveObject)监视数组突变。简单地使用pushsplice 不会更新计算属性。

【讨论】:

【参考方案2】:

无法评论上述正确答案,因为我没有足够的声誉,但我想添加指向与 Ember 的可观察枚举方法相关的文档的链接:

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

【讨论】:

以上是关于Ember.js:在服务的把手中使用计算属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ember.js 中创建计算属性以查看单个 Ember Data 属性是不是脏?

Ember.JS - 无法根据计算属性进行过滤或过滤

Ember.js、set() 和计算属性

组件中的 Ember.js 计算属性 vs 观察者 vs didReceiveAttrs()

Ember 计算属性是不是意味着与/包含异步代码一起使用? [关闭]

使用两个输入字段创建具有计算机属性(getter 和 setter)的 Date 对象 Ember JS