gpt4 book ai didi

ember.js - Ember 数据中重复的null-id记录

转载 作者:行者123 更新时间:2023-12-02 06:00:34 25 4
gpt4 key购买 nike

我正在使用ember 1.0和ember-data 1.0.0 beta1。我有以下路由和 Controller 来创建和保存简单的注释(“AuthenticatedRoute”只是为登录用户定制的路由):

App.Note = DS.Model.extend({
title: DS.attr(),
author: DS.attr(),
body: DS.attr(),
createdAt: DS.attr()
});


App.NotesRoute = App.AuthenticatedRoute.extend({
model: function() { return this.store.find('note'); },
});

App.NotesNewRoute = App.AuthenticatedRoute.extend({
model: function() {
return this.store.createRecord('note');
}
});

App.NotesNewController = Ember.ObjectController.extend({
actions: {
save: function() {
var self = this, model = this.get('model');
model.set('author', localStorage.username);
model.set('createdAt', new Date());
model.save().then(function() {
self.get('target.router').transitionTo('notes.index');
});
}
}
});

当我保存新笔记时,一切都会按预期进行。但是,当我离开备忘路线,然后又回到其中时,备忘列表中会出现重复的条目。一个条目具有ID,可以编辑,删除等,另一个条目具有第一个条目的所有数据,但id属性为null。在我看来,即使记录已提交,ember-data仍会保持新创建的记录(该记录尚未提交到数据库,因此还没有ID)仍然有效,但是我不确定原因。重新加载页面时,列表正确显示,没有重复出现。我究竟做错了什么?

作为记录,我使用的是mongodb,所以我使用了一个自定义序列化程序将'_id'属性转换为对ember-data友好的'id',本质上是从 here复制而来的:
  App.NoteSerializer = DS.RESTSerializer.extend({
normalize: function(type, hash, property) {
// normalize the '_id'
var json = { id: hash._id };
delete hash._id;

// normalize the underscored properties
for (var prop in hash) {
json[prop.camelize()] = hash[prop];
}

// delegate to any type-specific normalizations
return this._super(type, json, property);
}
});

我还应该提到这个问题也存在于ember-data 0.13中。

最佳答案

这是我的RESTful服务器中的一个愚蠢错误。我用204(空)响应而不是预期的 Ember 数据来响应POST请求,即使用新创建的记录作为有效负载的201(“创建的”)响应。 This post让我意识到了。

不过,最好将此信息包括在official REST adapter documentation中。

关于ember.js - Ember 数据中重复的null-id记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18671265/

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