gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:15:10 30 4
gpt4 key购买 nike

鉴于模型:

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() (通过 ember-data 的 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.

我在这里做错了什么?

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

最佳答案

首先,您需要“反射(reflect)”模型之间的关系:

   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 中的 Tag。

关于ember.js - 如何使用 store.commit() 的响应 json 更新 DS.Model?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11532282/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com