我的模型关系定义如下
App.Person = DS.Model.extend({
name: DS.attr(),
imageUrl: DS.attr(),
bills: DS.hasMany("bill", { async: true}),
});
App.Bill = DS.Model.extend({
description: DS.attr(),
amount: DS.attr(),
person: DS.belongsTo("person")
});
如何获取控制器内所有人的账单并将其传递给控制器,以便我可以显示所有账单? 一种解决方案是在把手模板内迭代。 但我需要获取控制器本身的数据并将其用作模板中的属性?
App.DashboardController = Ember.ArrayController.extend({
bills: function(){
return /*Bills here*/;
}.property()
});
答案 0 :(得分:0)
如果我理解正确,并且App.Person
实例是您DashboardRotue
的模型,那么我不确定您目前所拥有的内容是什么。
作为一个小背景信息,Ember.js中的控制器装饰一个模型。通俗地说,这意味着所有属性都来自控制器,即使控制器必须向模型询问它们。因此,如果您向控制器询问bills
属性,它会看到它没有属性,而是从模型中获取该属性。因此,如果您想要的只是那个人的账单,您根本不需要在控制器中声明任何内容。您可以在模板中执行此操作,它可以正常工作:
<ul>
{{#each bills}}
<li>{{amount}} - {{description}}</li>
{{/each}}
</ul>
但如果我理解正确,你似乎想要所有人的账单。这有点棘手,但仍有可能。如果你想在整个系统中所有账单(我认为它们是相同的),最简单的方法是获取它们并将它们用作ArrayController
中的模型
model: function() {
return this.store.find('bill'); // Find all bills
}
您的模板将如下所示:
<ul>
{{#each}}
<li>{{amount}} - {{description}}</li>
{{/each}}
</ul>
但是如果你想获得所有人的账单,那么你的工作就会被裁掉。您需要执行与上面相同的操作,只需获取所有person
而不是bill
s。然后,您需要在控制器中使用计算属性来加入所有人的所有账单。但是,您无法嵌套@each
观察者,您的属性将无法正确更新。如果这确实是你的用例,我强烈建议重新考虑它。如果你真的需要它,我可以帮助你,但同样,这并不容易。