2014-04-28 118 views
0

我有如下圖所示具有與它相關聯的兩個型號的路線:EmberJS:從路徑檢索模型時,多個模型檢索

App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
    return Ember.RSVP.hash({ 
     sites: this.store.find('site'), 
     songs: this.store.find('song') 
    }) 
    }, 

現在以後,我需要能夠檢索到的第一個對象在sites模型中,以便進行轉換,我將在下面顯示。我想我可以使用setupController設定的車型,但與多個模型打交道時如上depicated,我不知道如何填寫這一部分:

setupController: function(controller, ???) { 
    controller.set('model1', ???); 
    controller.set('model2', ???); 
    } 

最後,我想能夠檢索模型1的第一個對象(它是site多個實例如上所述)

afterModel: function() { 
    firstRecord = this.('sites').objectAt(0); 
    this.transitionTo('site', firstRecord.id); 
    } 

這也有可能是我沒有正確設計我的應用程序。在這種情況下,sites是我構建的一個組件,它在幾個不同的控制器內顯示不同的站點。控制器依賴於這個組件,因爲他們需要知道爲了完成自己的事情而選擇了哪個站點。因此,在需要訪問該組件控制器,我做這樣的事情:

{{site-nav sites=sites}} 

哪裏site-nav是我的組件。它需要自己的模型,控制器本身也是如此。

回答

2

首先,你將需要稍微修改模型掛鉤,以確保您在正確的範圍內停留:

model:function(){ 
    var self = this; 
    return Ember.RSVP.hash({ 
     sites: self.store.find('site'), 
     songs: self.store.find('song') 
    }) 
} 

要獲得不同車型在setupController,你剛剛從訪問第二個參數,就像這樣:

setupController:function(controller,models) { 
    controller.set('sites',models.sites); 
    controller.set('songs',models.songs); 
} 

afterModel提供兩個參數,這首先是你的路由解決模式,所以你會做這樣的事情:

afterModel:function(models){ 
    var site = models.sites.get('firstObject'); 
    this.transitionTo('site',site); 
} 
+0

我相信我在這裏傳遞一個null對象給transitionTo()。試過你的解決方案,並看到這個在燼控制檯:載入路由時出錯:TypeError:undefined不是一個函數 – randombits

+0

嘗試將其記錄到控制檯,並看到你得到什麼。 – NicholasJohn16

+0

是的 - 試了這個。 console.log(「model:」+ models.get('sites')。get('firstObject'));不提供任何東西。 – randombits