Ember.js 带有余烬能量选择的余烬阵列选项
我的模型有两个属性(Ember.js 带有余烬能量选择的余烬阵列选项,ember.js,Ember.js,我的模型有两个属性(baseCurrency和othercurrency),其值由2个成员幂选择下拉菜单选择,其选项取决于两个计算属性(baseCurrencyOptions和otherCurrencyOptions) 控制器 ... otherCurrencyOptions: Ember.computed('model.baseCurrency', function() { console.log(`allCurrencies changed to: ${this.get('a
baseCurrency
和othercurrency
),其值由2个成员幂选择下拉菜单选择,其选项取决于两个计算属性(baseCurrencyOptions
和otherCurrencyOptions
)
控制器
...
otherCurrencyOptions: Ember.computed('model.baseCurrency', function() {
console.log(`allCurrencies changed to: ${this.get('allCurrencies')}`);
return Ember.A(this.get('allCurrencies')).removeObject(this.get('model.baseCurrency'));
}),
baseCurrencyOptions: Ember.computed('model.otherCurrencies', function() {
console.log(`allCurrencies changed to: ${this.get('allCurrencies')}`);
return Ember.A(this.get('allCurrencies')).removeObjects(this.get('model.otherCurrencies'));
})
...
allCurrencies
属性包含所有货币的列表,不应随时间而更改
模板
{{#power-select searchEnabled=true options=baseCurrencyOptions selected=model.baseCurrency onchange=(action (mut model.baseCurrency) as |currency|}}
{{currency}}
{{/power-select}}
{{#power-select-multiple searchEnabled=true options=otherCurrencyOptions selected=model.otherCurrencies onchange=(action (mut model.otherCurrencies)) as |currency|}}
{{currency}}
{{/power-select-multiple}}
问题是每次我在两个下拉菜单中的一个或另一个中选择一种货币时,allcurrences
属性都会以不可逆的方式更新,每个选择的货币都会丢失。我希望Ember.A()
在不修改'allcurrences!'的情况下创建一个全新的对象!。此外,我得到了以下警告:
弃用:您在一次渲染中修改了两次ConcatenatedTrigger类。这在Ember 1.x中不可靠,将在Ember 3.0中删除[弃用id:Ember View.render double modify]
Ember。A
不会创建全新的Array
它只会实现Ember.Enumerables
和Array Interface()
这是我建议的选择
1) 要创建全新的数组,可以使用toArray
方法。所以改变这个
Ember.A(this.get('allCurrencies'))
tothis.get('allCurrencies').toArray()
2) 另一个选项是,使用forEach
迭代allcurrency
,并在回调内部使用iteratebasecurrency检查条件并填充otherCurrency数组
var baseCurreny = this.get('model.baseCurrency');
var otherCurrency = [];
this.get('allCurrencies').forEach(function(item, index, self) {
/*I assume id as your unique property to identify object
if (!baseCurrency.findBy('id', item.id)) {
otherCurrency.pushObject(item);
}*/
//or if its plain string then
baseCurrency.forEach(function(baseItem) {
if (item !== baseItem) {
otherCurrency.pushObject(item);
}
});
});
[{id:1,名称:'Dollar',类型:'base'},{id:2,名称:'Yen',类型:'other'}]
因此,您可以使用计算宏获取基本货币
和其他货币
谢谢@kumkanillam。我成功地采用了
toArray()
选项。但我仍然感到困惑,因为我认为这有点误导……尽管他们提到了并没有修改原始对象
,但仍然是第一句(从类似数组的对象创建了一个Ember.NativeArray)。
)导致了混乱。加入并加入频道#-团队学习,与他们讨论并提交请求。这也会帮助其他人。学习团队将欢迎您的公关。
baseCurrencies:Ember.computed.filterBy('allCurrencies','type','base')
otherCurrencies:Ember.computed.filterBy('allCurrencies','type','other')