2014-04-25 45 views
0

我有灰燼應用程序使用模型爲:灰燼型號空,直到進入路由

  • 食品
  • 膳食

(還有其他的模型,但這些ommitted爲簡潔起見) 。

路由器是這樣構成的:

this.resource('food', { path: '/food/:food_id' }); 

this.resource('meals',function() { 
    this.resource('meal', { path: '/:meal_id'}, function() { 
    this.route('edit'); 
    }); 

    this.route('new'); 
}); 

在我的食物模板,我需要以打印他們進入膳食清單。最初,我想到FoodController上的needs屬性可以做到這一點。

App.FoodController = Ember.ObjectController.extend({ 
    needs: ['meals', 'mealsIndex'], 
    ... 
}); 

在我的模板然後我試圖

{{#each meal in controllers.meals.content}} 
    TEST 
{{/each}} 

...但不顯示任何內容。我實際上已經嘗試了其他幾種方法,但沒有任何效果。

我懷疑在輸入meals路由之前,MealsController的模型可能沒有被設置。

我完全卡在這裏,文檔沒有幫助。任何幫助非常感謝。

回答

0

您需要手動從服務器請求的型號,像這樣:

App.FoodRoute = Ember.Route.extend({ 
    model:function(params){ 
     var store = this.store; 
     return Ember.RSVP.hash({ 
      food:store.find('food',params.food_id), 
      meals:store.find('meals') 
     }); 
    }, 
    controllerSetup:function(controller,models) { 
     controller.set('model',models.food); 
     this.controllerFor('meals').set('model',models.meals); 
    } 
}); 

當你的應用進入食品的路線,它會要求當前的糧食和所有的飯菜都。然後它將食物控制器的模型和所有膳食設置爲膳食控制器上的模型。您可以像使用需求設置一樣在模板中訪問它們。

+0

非常感謝您提供清晰簡潔的答案。另外一個選擇我剛剛制定出來,就是在應用程序路線中請求Meals(來自商店),然後使用'controllerFor'在Meals控制器上設置「content」屬性。我最初嘗試直接在Food.Route中進行上述操作,但這並不奏效。我現在會測試你的解決方案。 – getdave

+0

當我嘗試你的解決方案時,我得到一個錯誤'錯誤:undefined不是一個函數'。請注意,Food不會實現Ember數據適配器,因此不會使用商店。不知道如何調試。 – getdave

+0

嘗試改變RSVP.hash中的食物線,然而您正在獲取食物項目。你知道哪條線路導致這個問題? – NicholasJohn16