[英]Accessing parent route model in Ember.js
我正在嘗試編寫一條需要訪問其父模型的路由。 我使用this.modelFor()
,但是當我這樣做時,父模型沒有完全加載,所以它的所有屬性都包含null
。
這是路由器,有兩個動態段:
MGames.Router.map(function () {
this.resource('games', function () {
this.resource ('game', {path: '/:game_id'}, function () {
this.resource('board', {path: '/boards/:board_id'});
});
});
});
這是我的GameRoute,完美運作:
MGames.GameRoute = Ember.Route.extend ({
model: function (params) {
return MGames.Game.find(params.game_id);
}
});
最后這是兒童路線,誰需要訪問游戲模型,這就是我寫的。 但無論我做什么, console.log()
總是打印null
。 如果我檢查game
變量,則isLoad
屬性始終為null:
MGames.BoardRoute = Ember.Route.extend ({
model: function (params) {
var game = this.modelFor ('game');
console.log (game.get("id"));
return MGames.Board.find(game.get("id"), params.board_id);
}
});
我做錯了什么,或者(我懷疑)我錯過了一些Ember概念?
這部分代碼看起來不錯。 您的假設是正確的,嵌套路由應通過modelFor
獲取父模型。
我懷疑你的find方法是bug的來源。 我查看了你之前的問題 ,我假設同樣的Game.find
在這里使用(?)
問題與Promises
。 Ember的路由器理解model
鈎子的異步性質。 但它依賴於你返回一個Promise
去做它的工作。 目前您正在使用jQuery承諾,但立即返回game
對象的未初始化狀態。 查詢從服務器加載,但假定model()
掛鈎在此之前已解析。
你想直接從model
鈎子返回jQuery Promise
+在第一個中then
解析then
返回結果。
這是你修改過的Game.find
。 同樣的原則適用於其他發現者。
find: function (game, board) {
url = [MGames.GAMES_API_URL];
url.push ('games');
url.push (game);
url.push ('boards');
url.push (board);
url = url.join('/');
return $.getJSON(url)
.then(function(response) {
var game = MGames.Game.create({isLoaded: false});
game.setProperties(response);
game.set('isLoaded', true);
return game;
});
}
請注意,游戲對象按原樣返回。 Ember理解當promise被解決時(通過返回除promise之外的任何東西),該結果是model()
鈎子的model()
。 此game
對象是現在可在嵌套路徑中的modelFor
中使用的模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.