2016-06-24 45 views
0

我从计算属性返回数组时遇到了这个奇怪的问题。我完全知道这个问题(如下),但不知道解决方案。创建了一个演示目的来解释的旋转。ember js - 从计算属性返回的值看起来缓存

案例1https://ember-twiddle.com/9910dfea25b6fc4791e3920acca2558d?openFiles=controllers.application.js%2C

步骤:

一)检查的第一个复选框,如果我们看到的“改编”,在控制台中的值时,“newprop”属性将被添加到每个对象in“arr”

b)取消选择相同的复选框,查看控制台,同样的“arr”会以“newprop”仍然返回。 但我假设,它不会在那里,因为如果条件有检查。

所以,经过一些故障排除后,我想出了这个相同的下一个旋转。

案例2https://ember-twiddle.com/735750b0a41c4bf87841bc79c6163259?openFiles=controllers.application.js%2C

执行相同的步骤,我们看到,这一次的“改编”没有“newprop”当复选框取消选中

只是玩弄之间的区别是第一个数组(具有数据/模型)是在“getData”本身中定义的,第二个是从另一个计算属性“what”中获取的。

我在找什么:我需要有案例1的旋转工作,但是当复选框未被选中时,“arr”应该返回没有“newprop”的实际原始“arr”。 另外,需要了解为什么会发生。唯一改变的是直接在fn中或通过另一个计算属性获取数据。

回答

1

这是计算属性的主要目的。他们改变,如果他们是从属关键的变化。在情况2中,你总是重新定义你的数组。在情况1中,您每次调用都访问相同的数组。

在情况1中,您可以在属性列表中添加一个相关键。

what: function(){ 
    var arr = [ 
     { 
     a:"b", 
     c: [ 
      {key:"1"},{key:"2"} 
     ] 
     }, 
     { 
     a:"f", 
     c: [ 
      {key:"1"},{key:"1"} 
     ] 
     } 
    ]; 
    return arr; 
    }.property('filterSet'), // see here 

这将再生您的数组属性filterSet变化时。

编辑:

proof

+0

但我已经给 “filterSet” 作为一个依赖于 “的getData” 属性,是不是正确的。这是为了确保每当filterSet发生更改时调用getData。如果这是正确的,getData总是获取“what”属性,因为this.get('what')应该始终将其取回为原始数据。请纠正我,如果错误 – whyAto8

+0

你做了这个在旋转?因为它没有改变案例1中的问题,在旋转中。 – Craicerjack

+1

@Craicerjack是的,我改变了旋转中的代码,它在控制台显示了我想要的结果。 – Timm