数组值保存在同一组件的多个实例中

时间:2017-11-09 09:35:45

标签: ember.js

我有一个属性为arr:[]的组件,我在init上通过this.get('arr').push('value one');向该属性推送了一些值。如果我多次使用此组件,则arr的值将保留在所有其他组件中。 例如: 如果我在组件init上推送一些值,this.get('arr').push('value one')。 如果我使用这个组件一次它工作正常,但对于第二次使用/实例,arr已经有长度1,然后我推它。

看看这个旋风的控制台。

https://ember-twiddle.com/8a6527aebf829ee1876bccb5e3ee47b1

这种行为是奇怪的还是它应该像这样工作?

1 个答案:

答案 0 :(得分:1)

根据您的示例预计会出现此行为,但通常情况下,这种情况通常不合适。来自Ember指南:https://guides.emberjs.com/v2.16.0/object-model/classes-and-instances/

  
      
  • 直接在任何Ember.Object上定义的数组和对象在该类的所有实例之间共享。

  •   
  • 为避免此行为,建议在init()期间初始化这些数组和对象属性。这样做可确保每个实例都是唯一的。

  •   

建议在您的示例中实施以下内容:

arr: null,

init() {
  this.set('arr', []);
  // .......
}

下面的EmberTwiddle提供了另一个“粗略”的例子:https://ember-twiddle.com/1006a702aa09c6d365bd1a46ca283059?openFiles=components.my-component.js%2C