我想學習如何創建一個窗體,從幾個模型中繪製。ember.js從多個模型商店拉單個模板
例如,Person
形式,用戶可以,他們屬於什麼Company
(獨立模型)來,他們是在什麼Group
S(單獨的模型),他們開什麼Car
(獨立型)指定他們的姓名,城市等等,我找不到任何有關如何實現這個目標的文件。
在我見過的所有例子中,路徑負責告訴模板使用哪種單一模型類型。我不知道如何創建從不同模型存儲庫中提取的下拉式或前進式。
我該如何做到這一點?
我想學習如何創建一個窗體,從幾個模型中繪製。ember.js從多個模型商店拉單個模板
例如,Person
形式,用戶可以,他們屬於什麼Company
(獨立模型)來,他們是在什麼Group
S(單獨的模型),他們開什麼Car
(獨立型)指定他們的姓名,城市等等,我找不到任何有關如何實現這個目標的文件。
在我見過的所有例子中,路徑負責告訴模板使用哪種單一模型類型。我不知道如何創建從不同模型存儲庫中提取的下拉式或前進式。
我該如何做到這一點?
有幾種方法可以實現這一點。 (1)將一個屬性添加到您的控制器,該屬性返回您的下拉菜單的必要記錄。
http://emberjs.jsbin.com/AqimiFI/4/edit
setupController: function(controller, model) {
this._super(controller, model);
// set an empty array
controller.set('states', []);
this.get('store').find('state').then(function(states){
//once the states are resolved set the states to the records
controller.set('states', states);
});
}
(2)在應用程序中的某一點(無論它似乎是恰當的)在你的路線之一創建有關物品的控制,並設置控制器的項目模型,然後使用需求。我喜歡這種方法,因爲你可以使用控制器在整個應用程序中添加邏輯,並把它共享等..
http://emberjs.jsbin.com/AqimiFI/5/edit
setupController: function(controller, model) {
this._super(controller, model);
var states = this.controllerFor('states');
states.set('model', this.get('store').find('state'));
}
App.ApplicationController = Ember.ArrayController.extend({
needs:['states'],
states:function(){
return this.get('controllers.states');
}.property('controllers.states')
});
在這個例子中,我創建了一個狀態控制器申請路線。這並不是將它綁定到應用程序控制器/路由,它只是一個早期的鉤子,我可以利用它創建控制器來保存數據。
爲了從另一個控制器訪問控制器,您必須指定您需要它(需要:['states'])。
states屬性返回狀態控制器(重要的是要記住,數組控制器和一般的控制器,在燼中只是它們模型上的裝飾器)。 Ember將代理所有獲取/設置調用模型(如果它們不存在於控制器上)。所以當我返回狀態控制器的時候,你可以把它看作是返回模型,這是狀態數組。
因此,您可以嘗試在控制器上設置屬性,但它可能無法按預期工作。我利用了這樣一個事實,即我知道如果我在模型上設定承諾,它實際上會解決這個承諾,並用承諾的結果替換模型。這只是更接近手動創建控制器的預期行爲。
哇......這很混亂。讓我試着翻譯我認爲正在發生的事情。在'ApplicationRoute'中爲'StatesController'指定模型,你就是說你需要'ApplicationController'中的'StatesController'。 'ApplicationController'上的'state'屬性從'this.get('controllers.states')''中的'StatesController'返回模型?如果這是正確的,你可以直接在'StatesController'中定義'StatesController'的模型,而不是在'ApplicationRoute'中定義模型? – David
哈,如果我使用了多個控制器,可能會有點混亂,讓我看看我是否可以打破你的陳述。 – Kingpin2k
哈哈謝謝!這將非常有幫助 – David