store.findAll()何时返回重复值?

时间:2014-01-24 18:12:44

标签: javascript ember.js

我正在从服务器请求用户。只有一个用户,这就是HTTP上的内容。但是,当我循环从.findAll()调用返回的行时,我看到多个值。

我的路线:

U.UsersIndexRoute = Ember.Route.extend({
    model: function() {
        return {
            users: this.store.findAll('user')
        };
    },
    setupController: function(controller, model) {
        controller.set('model', model.users);
    }
});

我的控制器(删节):

U.UsersIndexController = U.ApplicationArrayController.extend({
    _modelChanged: function() {
        this.get('model').then(_.bind(function(users) {
            _.each(users.get('content'), function(user) {

                // I should only see one name logged
                console.log(user.get('name'), user.get('id'));

            });
        }, this));
    }.observes('model', 'orgNameForId')
})

服务器对GET /users

的响应
{
    "Results": [{
        "id": 16,
        "Name": "Chris"
    }]
}

运行时,控制台会显示2个用户,一个是Chris 16,另一个是Chris null

我的问题

  • null ID是否意味着我的代码中的其他内容正在创建记录?
  • 我应该只是过滤掉没有ID的模型吗?
  • 帮助!

1 个答案:

答案 0 :(得分:0)

当您在应用程序中创建用户时,它期望从具有id的服务器成功回调,如果配置正确,将自动为您更新。如果没有,则保留为null。当你执行GET请求时,它会添加服务器将其发送给ember-data的内容,这将是另一个因为id不匹配而无法识别为同一模型的模型。

如果您还没有使用它,我会查看Ember Inspector Chrome插件,它允许您查看路线,数据等。

正如评论中所提到的,ember-data需要以下格式,但是你提到在你的适配器中处理它:

{ 'users' : [{ 
    'id': 16, 
    'Name": "Chris" }]
}

关于您的上一个问题,您不应过滤掉ID为null的模型。您应该创建应用,以便没有null

的ID