如此。我在我的component.js中有这个:
…
inputs: Ember.A(),
inputGroup: computed('inputs.[]', {
get() {
return this.get('inputs').mapBy('value');
},
set(_, values) {
# breakpoint 1
if (values) {
values.forEach(value => {
this.get('inputs').addObject({ id: Symbol(), value: value });
});
}
# breakpoint 2
return this.get('inputs').mapBy('value');
},
}),
...
我的app.hbs中有2个这个组件:
{{addon-component inputGroup=firstGroup … }} {{addon-component inputGroup=secondGroup … }}
使用app.js:
…
firstGroup: Ember.A([’text@text.com’]),
secondGroup: Ember.A(),
…
在我的第一个组件中,# breakpoint 1
,inputs === []
,# breakpoint 2
,inputs === ['test@test.com']
上的调试器
在我的第二个,# breakpoint 1
上的调试器,已经inputs === [‘text@text.com’]
。
怎么可能?
答案 0 :(得分:2)
您不应该直接在组件上声明数组或对象。以这种方式声明的数组或对象在组件实例之间共享。您需要在init钩子中声明它们,这样它们将为每个组件实例设置独立。所以你需要以这种方式声明输入。
//inside component
init() {
this._super(...arguments);
this.set('inputs', Ember.A());
}
来自the guide:
直接在任何Ember.Object上定义的数组和对象是共享的 跨越该对象的所有实例。