我是ember js的新手。我们使用的版本是1.13.x,我已经面对这个问题一个多星期了。我有一个计算数组属性otherCurrencies。此属性用于填充屏幕上的一组复选框。此复选框组件在dom上呈现为视图,其值根据下拉列表中客户的选择进行切换。现在,如果我使用函数编写在控制器中分配otherCurrencies值的整个逻辑,它可以正常工作。根据客户A,将一组货币分配给otherCurrencies数组,并预先选择相应的复选框,类似地,对于客户B,预先选择了一组不同的货币。
但是一旦我将这个赋值的逻辑移动到一个计算属性,我就可以看到计算属性被调用,逻辑返回正确的货币值集,如我在全场使用的控制台记录器所示代码,但DOM没有得到更新,因为即使otherCurrencies数组包含值,复选框也没有预先填充。
我已经在网上狩猎了好几天,尝试过很多东西,但似乎根本没有用。我要求你提供一些关于这个问题的建议......提前谢谢
由于公司版权问题,我可能无法发布所有代码...但我想在这里发布最重要的内容,我再次道歉...希望这有帮助并请求您提供帮助
Computed property code in the model -
otherCurrencies : Em.computed('isExistingÇustomer', function(){
if(this.get('ísExistingCustomer') && this.get('selectedCustomerNo')){
var existingCurrencyDetails = this.get('arrayOfCurrencyDetails').findBy('çustomerNumber', this.get('selectedCustomerNo')); if(existingCurrencyDetails){
return existingCurrencyDetails.existingCurrencies
}
return [];
});
hbs文件中的复选框使用视图显示 - 模板中的代码 -
{{view ='xxx'options = availableCurrencies value = otherCurrencies model = model}}
Code inside the view which displays the values -
rows: function(){
var value = this.getWithDefault(‘value’);
this.get(‘content’).clear();
this.get(óptions’).forEach(function(item)){
if(item){
var object = Em.object.create({
code : item.code,
value : item.value,
selected : value.indexOf(item.code) != -1 ? true : false
});
this.get(‘content’).pushObject(object);
}
});
return this.get('content');
}.property('options.@each.code')
我可以看到在使用计算属性逻辑时根本不会调用此行函数,因此不会预先填充值。
谢谢和问候,Rahul