ember js - 从计算属性返回的值看起来缓存

时间:2016-06-24 08:41:59

标签: javascript arrays ember.js checkbox scope

从计算属性返回数组时,我遇到了这个奇怪的问题。我完全了解了问题(如下所示),但对解决方案不确定。已经创建了一个用于演示目的的旋转器来解释。

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

步骤:

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

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

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

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

执行相同的步骤,我们看到这次“arr”在未选中复选框时没有“newprop”

旋转之间的唯一差别在于,第一个数组(具有数据/模型)在“getData”本身中定义,在第二个中,它从另一个计算属性“what”中获取

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

1 个答案:

答案 0 :(得分: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