尝试更新Ember中的对象控制器内的模型时出错

时间:2013-09-22 20:32:10

标签: ember.js ember-data ember-model

页面加载从用户查看用户的个人资料时开始。他做了一些动作,我的代码做了ajax调用来更新它的用户类型 -

App.UserController = Ember.ObjectController.extend
  convert: ->
    $.get '/api/user/convert_to_client/' + id, (response) ->
      self.set('user_type', response.user.user_type)     

但每当我转到用户列表表并且Ember尝试从UsersRoute中获取所有用户时:

module.exports = App.UsersRoute = Em.Route.extend
    model: ->
      App.User.find({}).then (response) ->     
        self.controllerFor('users').set('content', response)       

然后我最终得到类似这些的所有错误:

Error Attempted to handle event `loadedData` : Object not updated after deleteRecord

Update ember-data model \

我认为这篇文章解释了这个问题 -

http://www.thomasboyt.com/2013/05/01/why-ember-data-breaks.html

  

未捕获错误:在进入时尝试处理事件loadedData   state rootState.loaded.updated.uncommitted。用{}

调用      

这意味着您正在尝试对记录做些什么   它无法在当前状态下完成。这通常在尝试时发生   更新当前正在保存的记录或尝试呈现的记录   已被删除的对象的属性。

但请注意,当它反过来时,我先去用户列表,然后去查看用户的个人资料,更新用户 - 这个错误永远不会出现。

编辑:

用户的示例回复:

{
  users: [
    {
       _id: 521e1112e8c5e10fb40002a0
        ..
    }
   ]
}

并且对于单个用户:

{
  user: {
    _id: 521e1116e8c5e10fb40004ca
  }
}

2 个答案:

答案 0 :(得分:0)

您应该在`setupController'挂钩中设置控制器,如下所示:

model: function() {
   return App.User.find({});
},
setupController: function(controller, model) {
   controller.set('content', model);
}

不确定这是否是唯一的问题。您可以发布有关您所遇到的错误的更多信息吗?

答案 1 :(得分:0)

您应该使用store.update更新商店中的记录而不更改记录的状态(而不是在记录中使用set),例如。

$.get '/api/user/convert_to_client/' + id, (response) =>
  @store.update 'user', id: id, user_type: response.user.user_type

或者,如果您正确构建了响应,只需:

@store.update 'user', response.user

注意:旧版本的EmberData可能无法使用update