2013-10-25 32 views
0

我想學習如何創建一個窗體,從幾個模型中繪製。ember.js從多個模型商店拉單個模板

例如,Person形式,用戶可以,他們屬於什麼Company(獨立模型)來,他們是在什麼Group S(單獨的模型),他們開什麼Car(獨立型)指定他們的姓名,城市等等,我找不到任何有關如何實現這個目標的文件。

在我見過的所有例子中,路徑負責告訴模板使用哪種單一模型類型。我不知道如何創建從不同模型存儲庫中提取的下拉式或前進式。

我該如何做到這一點?

回答

1

有幾種方法可以實現這一點。 (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將代理所有獲取/設置調用模型(如果它們不存在於控制器上)。所以當我返回狀態控制器的時候,你可以把它看作是返回模型,這是狀態數組。

因此,您可以嘗試在控制器上設置屬性,但它可能無法按預期工作。我利用了這樣一個事實,即我知道如果我在模型上設定承諾,它實際上會解決這個承諾,並用承諾的結果替換模型。這只是更接近手動創建控制器的預期行爲。

+0

哇......這很混亂。讓我試着翻譯我認爲正在發生的事情。在'ApplicationRoute'中爲'StatesController'指定模型,你就是說你需要'ApplicationController'中的'StatesController'。 'ApplicationController'上的'state'屬性從'this.get('controllers.states')''中的'StatesController'返回模型?如果這是正確的,你可以直接在'StatesController'中定義'StatesController'的模型,而不是在'ApplicationRoute'中定義模型? – David

+0

哈,如果我使用了多個控制器,可能會有點混亂,讓我看看我是否可以打破你的陳述。 – Kingpin2k

+0

哈哈謝謝!這將非常有幫助 – David