我正在使用ember-data#canary,当从商店查找记录时,它有一个严重的错误。
File: router.js
this.resource('games', function() {
this.route('game', { path: '/:game' });
});
File: games_route.js
App.GamesRoute = Ember.Route.extend({
model: function() {
// request: GET /api/games
// response: { games: [
// { id: 1, slug: lym, name: lose your marbles }
// ] }
return this.store.find('game');
}
});
File: game_route.js
App.GamesGameRoute = Ember.Route.extend({
model: function(params) {
// this query causes bogus data to show up.
// request: GET /api/games/lym
// response: { game: { id: 1, slug: lym, name: lose your marbles } }
return this.store.find('game', params.game);
},
serialize: function(game) {
return { game: game.get('slug') };
}
});
File game_model.js
App.Game = DS.Model.extend({
slug: DS.attr('string'),
name: DS.attr('string'),
});
当我访问/games
时,ember-inspector数据标签显示已加载1个游戏。
`id` `slug` `name`
1 lym lose your marbles
当我访问/games/lym
时,ember-inspector数据标签显示已加载2个游戏。
`id` `slug` `name`
1 lym lose your marbles
lym undefined undefined
第二个数据显然是假的。我不知道它来自哪里,这给我带来了麻烦。
答案 0 :(得分:1)
当您致电this.store.find('game', params.game)
时,ember数据会认为lym
是一个ID并使用此id
创建空记录。然后它接收带有实际记录的有效负载,并使用id = 1存储。
基本上,在store.find
中你应该使用实际的id,而不是slug,即使你的API支持slug。