Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何使用store.commit()中的响应json更新DS.Model?_Ember.js_Ember Data - Fatal编程技术网

Ember.js 如何使用store.commit()中的响应json更新DS.Model?

Ember.js 如何使用store.commit()中的响应json更新DS.Model?,ember.js,ember-data,Ember.js,Ember Data,鉴于模型: Blog.Post = DS.Model.extend({ title: DS.attr('string'), tags: DS.hasMany('Blog.Tag', { embedded: true }) }); Blog.Tag = DS.Model.extend({ foo: DS.attr('string'), bar: DS.attr('string') }); 例如: var myPost = Blog.Post.createRec

鉴于模型:

Blog.Post = DS.Model.extend({
    title: DS.attr('string'),
    tags:  DS.hasMany('Blog.Tag', { embedded: true })
});

Blog.Tag = DS.Model.extend({
    foo: DS.attr('string'),
    bar: DS.attr('string')
});
例如:

var myPost = Blog.Post.createRecord({ id: 45, title: 'Foo Bar' })
当我执行
myPost.store.commit()
(通过余烬数据的DS.RESTAdapter)时,我的服务器返回一个自动生成的标记列表,这些标记应应用于
myPost
。响应json示例:

{
  posts: [
    {
      id: 45,
      title: 'Foo Bar',
      tags: [
        { id: 1, foo: 'bar1' },
        { id: 2, foo: 'bar2' }
      ]
    }
  ]
}
我希望
myPost
最终会得到json返回的两个标记,但我得到的是以下错误:

Error: <DS.StateManager:ember448> could not respond to event invokeLifecycleCallbacks in state rootState.loaded.updated.uncommitted.
错误:无法响应状态为rootState.loaded.updated.uncommitted的事件invokeLifecycleCallbacks。
我做错了什么


编辑:根据@MikeAski的评论澄清json以包含ID。给出的示例是我的实际案例的简化版本——实际案例确实包括标记ID。

首先,您需要“镜像”模型之间的关系:

   Blog.Post = DS.Model.extend({
        title: DS.attr('string'),
        tags:  DS.hasMany('Blog.Tag', { embedded: always })
    });

    Blog.Tag = DS.Model.extend({
        foo: DS.attr('string'),
        bar: DS.attr('string'),
        post: DS.belongsTo('Blog.Post')
    });
然后需要将映射添加到适配器:

Blog.RESTSerializer = DS.RESTSerializer.extend({
  init: function() {
    this._super();

    this.map('Blog.Post',{
      tag:{embedded:'always'},
    });
  }
});

并将post_id添加到JSON中的标记。

您是否尝试侧载标记而不是嵌入它们?奇怪的是:您的标记没有id。看起来不对。。。服务器上的标记模型缺少任何序列化程序吗?@MikeAski我没有尝试侧载标记——我会尝试一下,然后发布结果。更新问题以包括标签ID;当我把问题归结为一个简单的例子时,我把它们省略了。你使用的是什么版本的余烬数据?尝试将“myPost”添加到事务中,然后提交事务。