gpt4 book ai didi

javascript - Ember data 1.0 beta 如何映射嵌入数据

转载 作者:行者123 更新时间:2023-11-28 20:19:27 25 4
gpt4 key购买 nike

看来 ember 数据到 1.0 beta 版本有很多变化。 0.13 版本一切都很好。现在我想更新到更高版本。就我而言,我们有一个嵌入式模型“用户”

    App.Post = DS.Model.extend({
subject: DS.attr('string'),
created: DS.attr('number'),
fcreated: function(){
debugger;
var d = new Date(this.get('created'));
return d.toLocaleDateString();
}.property('created'),

reporter: DS.belongsTo('user')
}

App.ApplicationAdapter = DS.RESTAdapter.extend({
namespace: 'restws'
});

来自服务器的 Json 看起来像这样。

   {
"posts": [
{
"id": "5226f2670364e70ae7d77266",
"subject": "Text",
"created": 1325410935048,
"reporter": {
"id": "5226f2660364e70ae7d771e2",
"firstName": "Doris",
"lastName": "Baumertr"
}
}

我收到以下错误代码“未捕获类型错误:无法调用未定义的方法“toString””。在 ember 源代码中,我看到,在 ember-data.js 第 2236 行中,函数抛出错误 'buildRecord: function(type, id, data) .. ' 调试后,我看到属性类型是未定义的 id 设置为正确的 id 和数据未定义?

有什么错误吗?如何映射嵌入的数据?

最佳答案

这实际上是您需要实现的确切 extractSingle 方法

App.PostSerializer = DS.RESTSerializer.extend({
extractSingle: function(store, type, payload, id, requestType) {
if(typeof payload.post.reporter !== "undefined") {
var reporter_id = payload.post.reporter.id;
payload.users = [payload.post.reporter];
payload.post.reporter = reporter_id;
}
return this._super.apply(this, arguments);
}
});

这是一个 jsbin http://jsbin.com/EKItexU/1/edit?html,js,output

请注意,我必须在 RESTAdapter 中重新定义 ajax 方法来模拟返回 JSON 的服务器。

此外,如果您在 JSON 中旁加载用户,则必须更新此方法,这样它就不会覆盖负载中的旁加载用户(payload.users 属性)

关于javascript - Ember data 1.0 beta 如何映射嵌入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618285/

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