ember-data miserable bug重复记录

时间:2014-08-14 15:22:36

标签: javascript ruby-on-rails node.js ember.js ember-data

我正在使用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

第二个数据显然是假的。我不知道它来自哪里,这给我带来了麻烦。

1 个答案:

答案 0 :(得分:1)

当您致电this.store.find('game', params.game)时,ember数据会认为lym是一个ID并使用此id创建空记录。然后它接收带有实际记录的有效负载,并使用id = 1存储。

基本上,在store.find中你应该使用实际的id,而不是slug,即使你的API支持slug。