2014-01-21 69 views
1

我的模型關係定義如下如何在控制器中獲取hasMany關係數據數組?

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

如果您想爲_all_人支付_all_賬單,您將不得不告訴我們DashboardController的模型是什麼。您可以在DashboardRoute的'model'鉤子中設置模型。 – GJK

+0

我在DashboardRoute的模型鉤子中尋找人物模型 – Dhakchianandan

回答

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即可。然後,您需要在您的控制器中計算一個屬性,以便爲所有人加入所有帳單。但相反,你不能嵌套@each觀察員,你的財產不會正確更新。如果這真的是你的用例,我強烈建議重新考慮它。如果你真的需要它,我可以幫助你,但是再次,這並不容易。

相關問題