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.log
或alert
时,那些方法在某些浏览器内部为JSON.stringify
对象为你提供方便。 Ember 不会那样做。您需要自己格式化数组,或者像我一样,each
对其进行格式化。出于调试目的,请随意使用 log
帮助程序。
数组上的计算属性通过 Ember 的方法(例如 pushObject
和 removeObject
)监视数组突变。简单地使用push
或splice
不会更新计算属性。
【讨论】:
【参考方案2】:无法评论上述正确答案,因为我没有足够的声誉,但我想添加指向与 Ember 的可观察枚举方法相关的文档的链接:
https://guides.emberjs.com/v2.5.0/object-model/enumerables/
【讨论】:
以上是关于Ember.js:在服务的把手中使用计算属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ember.js 中创建计算属性以查看单个 Ember Data 属性是不是脏?
组件中的 Ember.js 计算属性 vs 观察者 vs didReceiveAttrs()