【问题标题】:EmberJS trigger computed propertyEmberJS 触发计算属性
【发布时间】:2016-06-30 13:40:56
【问题描述】:

假设我有以下计算属性;

someCP: function() {

}.property(obj.innerObj.attr)

我的问题是,即使 obj.innerObj 没有定义“attr”,这也会被触发吗?

这个 CP 是如何工作的?

【问题讨论】:

  • 计算属性的依赖键不是字符串,是故意的吗? “触发”是什么意思?缓存不会失效,因为attr 不存在,因此不会更新。
  • 你尝试的时候发生了什么?

标签: javascript ember.js


【解决方案1】:

首先,在cmets中已经提到,依赖键应该是一个字符串:

someCP: function() {

}.property('obj.innerObj.attr')

另外,这段代码可以重写为:

someCP: Ember.computed('obj.innerObj.attr', function() {

})

不保证第一种形式有效。

对于“触发”,Ember 应该在第一次使用时计算属性,而不是缓存它并在依赖属性更改时重新计算。在你的情况下,它永远不会。但是我不确定它在实践中会如何工作,但理论上它应该以这种方式工作。

【讨论】:

  • 为什么说第一种形式不能保证工作?
  • @testndtv 可以通过配置禁用。如果您控制整个代码库和环境,这并不重要。你可以找到解释herehere