2015-05-14 3 views
0

У меня есть приложение Ember 1.11, созданное с помощью ember-cli 0.2.3. У меня есть следующие в моем файле router.js:Получение идентификатора родительского объекта в маршруте

this.route('ownedGames', function() { 
    this.route('gamePlays', {path: ":owned_game_id/plays"}, function() { }); 
}); 

Это позволяет мне использовать следующий URL:

http://localhost:4200/ownedGames/1/plays 

Когда я посещаю этот адрес, я получаю следующее сообщение об ошибке:

Uncaught Error: Assertion Failed: The value that #each loops over must be an Array. You passed '<[email protected]:owned-game::ember470:1>' (wrapped in (generated ownedGames.gamePlays controller)) 

Вот мой маршрут для GamePlay

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model: function(params) { 
     console.log("Getting game plays from store"); 
     return this.store.find('gamePlay', {ownedGame: params.owned_game_id}); 
    } 
}); 

И это, как я моделируется моя арматура данные:

OwnedGame.reopenClass({ 
    FIXTURES: [ 
     { id: "1", rating: "8.25", game: "1", plays: [1,2]}, 
     { id: "2", rating: "8.25", game: "2", plays: []}, 
     { id: "3", rating: "8.25", game: "3", plays: []}, 
     { id: "4", rating: "8.25", game: "4", plays: []} 
    ] 
}); 

GamePlay.reopenClass({ 
    FIXTURES: [ 
     {id: "1", date: "2015-01-01", ownedGame: "1"}, 
     {id: "2", date: "2015-02-01", ownedGame: "1"} 
    ] 
}); 

ответ

0

В маршрутизаторе карте вы установили :owned_game_dd быть доступны в ownedGames.ownedGame маршруте, поэтому этот параметр не будет доступно в ownedGames.ownedGame.gamePlays маршруте, как вы думаю. Чтобы получить параметры из другого маршрута, вы должны получить их от объекта transition, доступного в качестве второго параметра для метода model.

App.Router.map(function() { 
    this.resource('ownedGames', function() { 
    this.route('ownedGame', {path: '/:owned_game_id'}, function() { 
     this.route('gamePlays', {path: '/plays'}, function() { }); 
    }); 
    }); 
}); 

App.OwnedGamesOwnedGameGamePlaysRoute = Ember.Route.extend({ 
    model: function (params, transition) { 
     var id = transition.params['ownedGames.ownedGame'].owned_game_id; 

     return this.store.find('gamePlay', id); 
    } 
}); 

http://emberjs.jsbin.com/favucawadi/1/edit?html,js,output

+0

переход не определен. Так что это не работает. – Gregg

+0

@Gregg вы должны иметь это доступное https://github.com/emberjs/ember.js/blob/bfcc15ee3ac2b2b3e4dad6aa0d7a447936302f5a/packages/ember-routing/lib/system/route.js#L1327. если вы можете настроить jsbin, мы можем отладить furthur –

+0

Спасибо. Я сделал достаточно изменений, я не уверен, насколько важен этот вопрос. Я посмотрю, смогу ли я его редактировать, чтобы иметь смысл. – Gregg

0

Если ownedGame маршрут устанавливает свою модель, вы можете получить ссылку на модель с помощью modelFor() и обрывать его идентификатор. Это позволит вам отвлечь вас от того, каково ваше фактическое имя параметра для родительского маршрута.

У Ember нет документов о том, что является приватным и общедоступным в экземпляре перехода, но тот факт, что они передаются в параметрах. И переход к крючку модели подсказывает мне, что не на 100% безопасно захватывать параметры из объекта перехода если вы не будете спокойны с не-устареванием-заметными изменениями месяцев в пути.

Кроме того, this.resource() устарел в 1.13; если это новый проект, я бы выбрал this.route() полностью.

+0

У вас есть ссылка относительно устаревания ресурса? – Gregg

+0

http://discuss.emberjs.com/t/router-this-resource-gone-from-documentation-v1-11-0/7833/2 –

Смежные вопросы