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'))
to
this.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'}]
    因此,您可以使用计算宏获取
    基本货币
    其他货币
  • 基本货币:Ember.computed.filterBy('allcurrences','type','base') 其他货币:Ember.computed.filterBy('allcurrences','type','other')
    谢谢@kumkanillam。我成功地采用了
    toArray()
    选项。但我仍然感到困惑,因为我认为这有点误导……尽管他们提到了
    并没有修改原始对象
    ,但仍然是第一句(
    从类似数组的对象创建了一个Ember.NativeArray)。
    )导致了混乱。加入并加入频道#-团队学习,与他们讨论并提交请求。这也会帮助其他人。学习团队将欢迎您的公关。 baseCurrencies:Ember.computed.filterBy('allCurrencies','type','base') otherCurrencies:Ember.computed.filterBy('allCurrencies','type','other')