【发布时间】:2016-06-30 21:25:46
【问题描述】:
我必须访问控制器上两层深度的属性,但 [] 只能通过 emberjs 指南访问一层深度。
model(params) {
params.paramMapping = {
page: "page",
perPage: "per_page",
total_pages: "pages"
};
return this.findPaged('contractf', params);
},
setupController(controller, model) {
model.forEach(function(item) {
item.set('sale_price', item.get('dealers_sched_id.sale_price'));
});
controller.set('content', model);
},
上面,我的模型基本上是在 contractf 模型中以分页格式获取所有记录。然后我设置我的控制器并循环遍历所有这些模型并绑定一个 sale_price 属性,该属性进入它的关系,以在正确的模型关系中获取 sale_price。
现在在我的模板中,我有这个:
new_suggested_price: Ember.computed('selectedItems', 'selectedItems.[].sale_price', function() {
var ret = 0;
this.get('selectedItems').filterBy('car_used', 'N').forEach(function(contract){
var salePrice = contract.get('sale_price');
if (salePrice) {
ret += (salePrice*100);
}
});
return ret/100; // We *100/100, so we avoid a floating point calc error.
}),
基本上只是给我一个易于格式化的数字。如您所见,它取决于 selectedItems (基本上是模型,但按属性过滤)。所以我必须进入每个模型项并找到我设置的sale_price I 属性,如果它发生变化,这个计算属性将更新。阅读 Ember 的指南,我无法做到 selectedItems.[].dealers_sched_id.sale_price,因为它只深入了一层。
我认为在 setupController 上设置一个属性可以解决这个问题,但似乎并没有因为我仍然将 NaN 作为 sale_price 值。
现在,如果我将 setTimeout 函数设置为 500 毫秒,它会很好地填充。如何在页面加载时定义它?
感谢您的帮助。
【问题讨论】:
-
@locks 说得很好。我什至没有注意到无效的依赖键
-
@locks 谢谢!这对我有用:
'selectedItems.@each.isProcessing', 'selectedItems.@each.{dealers_sched_id,sale_price}'
标签: ember.js computed-properties