2014-01-24 36 views
0

我正在向服务器请求用户。只有一个用户,这是通过HTTP传递的。但是,当我循环从.findAll()调用返回的行时,我会看到多个值。何时会store.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

我的问题

  • 是否为空ID的意思是在我的代码别的东西创造的纪录?
  • 我应该总是过滤掉没有ID的模型吗?
  • 帮助!
+0

您最初是否通过应用程序创建此用户?如果是这样,当您创建用户时,它期望从服务器回拨一个ID。如果不是,我认为它保留为空。然后,当您执行GET请求时,它将获得一个新的请求,而旧的请求仍在内存中。另外,ember-data需要从服务器返回以下格式:'{'users':[{'id':16,'Name':“Chris”}]}'我很惊讶它的工作原样。 – EmptyArsenal

+0

是的,我完全有一个本地用户,没有得到正确的创建。良好的调用。此外,我有一个适配器,翻译该响应格式。我忘了提及,当我简化我的代码的问题。 – cdownie

回答

0

当您在应用程序中创建一个用户时,它希望从服务器成功回拨一个ID,如果配置正确,该ID将自动更新。如果不是,则保留为空。当您执行GET请求时,它将添加服务器将其发送到ember-data的内容,这将是另一个模型,因为id不匹配,所以它不会将其识别为同一个模型。

如果你还没有使用它,我检查了灰烬督察Chrome的插件,它可以让你看到的路线,数据等

正如评论所说,烬数据预计,下面的格式,但你提到的照顾,在你的适配器:

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

至于你的最后一个问题,你不应该过滤掉车型id为null。你应该创建你的应用程序,以便没有ID为null的ID。