如何在控制器内获取hasMany关系数据数组?

时间:2014-01-21 09:21:28

标签: javascript ember.js ember-data

我的模型关系定义如下

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()
});

1 个答案:

答案 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观察者,您的属性将无法正确更新。如果这确实是你的用例,我强烈建议重新考虑它。如果你真的需要它,我可以帮助你,但同样,这并不容易。