Ember.js 自定义适配器createRecord方法在存储区中保留空id记录
我目前正试图编写一个自定义的ember数据适配器来与我的后端一起使用,我遇到了一个似乎无法找到解决方案的问题 我正在使用 ember cli 0.2.7 余烬数据1.0.0-beta.17 我的适配器扩展了现有的RestaAdapter,正如ember data的作者所希望的那样,我正在 1.序列化快照 2.将其发送到我的服务器 3.从服务器接收回复,现在包括服务器端设置的id 4.使用规范化有效负载来解析承诺 因此:Ember.js 自定义适配器createRecord方法在存储区中保留空id记录,ember.js,ember-data,adapter,Ember.js,Ember Data,Adapter,我目前正试图编写一个自定义的ember数据适配器来与我的后端一起使用,我遇到了一个似乎无法找到解决方案的问题 我正在使用 ember cli 0.2.7 余烬数据1.0.0-beta.17 我的适配器扩展了现有的RestaAdapter,正如ember data的作者所希望的那样,我正在 1.序列化快照 2.将其发送到我的服务器 3.从服务器接收回复,现在包括服务器端设置的id 4.使用规范化有效负载来解析承诺 因此: createRecord: function(store, type, sn
createRecord: function(store, type, snapshot) {
var ws = this.get('ws');
var data = this.serialize(snapshot, {includeId: false});
return new Ember.RSVP.Promise(function(resolve, reject) {
var route = type.typeKey;
ws.create(route, data,
function(context, data) {
try {
var resdata = store.normalize(route, data);
resolve(resdata);
} catch(err) {
console.error(err);
}
},
function(context, data) {
console.log(data);
reject(data);
}
);
});
}
正在解析的标准化有效负载如下所示:
{
name: "Some name",
id: 115,
reference: "Some reference"
}
问题是解析不会更新存储中的当前记录,而是创建一个全新的记录。结果是我得到了两条相同的记录:一条记录对应于后端的正确数字ID,另一条记录的ID设置为null
我试过打电话
store.updateId(snapshot.record, {id: resdata.id});
这将使用正确的ID更新记录,但抛出错误并使记录处于脏状态。另外,我不认为updateId方法是打算从适配器调用的,但我不确定,也许其他人对此了解得更多
更新存储中记录id的正确方法是什么?非常感谢任何能帮助我解决这个问题的建议。我遇到了类似的问题。不过,我没有看到重复的记录,只有保存时的错误。在查看了他们的源代码之后,我们似乎需要在快照上调用updateId。所以
store.updateId(snapshot._internalModel, {id: resdata.id});
这相当于修复了我的问题
希望这至少能帮你解决问题
我正在使用Ember数据1.13.9运行Ember 1.13.8。结果表明,问题毕竟与我的自定义适配器无关,而是在我的序列化程序中返回了不正确的负载(也是自定义的)。我以一个非常直截了当的“createRecord”方法结束,该方法如下所示:
createRecord: function(store, type, snapshot) {
var ws = this.ws();
var data = this.serialize(snapshot, {includeId: false});
return new Ember.RSVP.Promise(function(resolve, reject) {
var route = type.modelName;
ws.create(route, data,
function(context, data) {
Ember.run(null, resolve, data);
},
function(context, data) {
console.error(data);
Ember.run(null, reject, data);
}
);
});
},