我遇到了一个奇怪的问题,我的计算属性没有执行。经过一些测试后,我意识到对象中的其他计算属性工作正常,唯一的区别是工作的属性在模板中呈现/使用。
我已经创建了一个JSBin来演示。 http://jsbin.com/izoyok/16/
这两个属性具有相同的代码和行为。唯一的区别是items1ComputedProperty在模板中使用。并注意计算属性正在按预期将消息记录到控制台中。
这是ember的要求还是优化,如果它们在模板中被重新插入,那么只花时间评估计算属性?或者我是否犯了其他错误。
我可以理解他们是否通过设计做到这一点,因为可以认为计算属性不应该以这种方式使用,并且你可以使用观察者为实例属性赋值,但另一方面我想象很多人们不会做同样的假设,我没有看到任何解释行为的文件。
答案 0 :(得分:3)
这不是一个模板的事情。计算属性仅在尝试使用它们时执行。因此,当模板引用计算属性时,ember会执行该函数并缓存结果。然后将来它会使用缓存值,除非其中一个依赖属性发生了变化,在这种情况下缓存无效并且该函数将再次执行。