gpt4 book ai didi

javascript - Ember Data 不为新实例创建 id

转载 作者:行者123 更新时间:2023-11-29 18:06:53 25 4
gpt4 key购买 nike

我使用本地存储适配器创建了一个 Ember 应用程序原型(prototype)。

我现在正尝试将应用程序转换为使用带有后端存储的 Ember Data REST 适配器。

在应用程序的本地存储版本中,Ember 在保存新记录之前为它生成一个 ID(即使记录从未保存过也是如此)。

例如,在我的本地存储应用中,我可以在两个地方记录id

var gecko = this.store.createRecord('gecko', {
date: new Date(),
type: "gecko",
});
console.log(gecko.id, "gecko.id before save");
gecko.save();
console.log(gecko.id, "gecko.id");

相比之下,在我使用后端商店的 REST 适配器制作的应用程序版本中,没有记录 ID。

当我检查 Ember 发送到服务器的数据时,没有包含 id(可能是因为从未生成过 id)。

这是 Ember 发送到我的服务器的 json

  gecko: { type: "alloc", date: "2015-05-30T13:28:27.539Z"}

我假设我应该保存 Ember 在我的服务器上生成的 ID(这当然会允许它通过 ID 检索记录,前提是我的服务器实现了它)。

问题:为什么没有生成id?

这是代码

    App = Ember.Application.create();

App.Router.map(function() {
this.route("gecko", { path: "/" });

});
App.ApplicationAdapter = DS.RESTAdapter.extend({
//haven't actually any created any code for this part yet
});
App.ApplicationStore = DS.Store.extend({
adapter: App.ApplicationAdapter.create()
});
App.Gecko = DS.Model.extend({
type: DS.attr('string'),
date: DS.attr('date')
})
App.GeckoRoute = Ember.Route.extend({

model: function() {
//currently does nothing. originally I tried to do `return this.store.find('gecko') but since there are no records yet on the backend, it's returning null which leads to an error which Array cannot map over
},
});
App.GeckoController = Ember.Controller.extend({

actions: {
createGeckoButtonClicked: function(){

var gecko = this.store.createRecord('gecko', {
date: new Date(),
type: "gecko",
});
console.log(gecko.id, "gecko.id before save"); //null
gecko.save();
console.log(gecko.id, "gecko.id"); //null
}


}

注意——我不确定它是否相关,但我觉得我在路由方面处于先有鸡还是先有蛋的情况,因为在创建条目之前我无法返回任何条目。

因此,我正在尝试设置 Ember 应用程序以便能够将条目发布到服务器,然后我将使用 return this.store.find('gecko') 实现检索它的路由

最佳答案

当您使用 RESTAdapter 并保存模型时,ember-data 需要一个有效的有效负载,其中包括您的后端生成的唯一 ID。

var gecko = this.store.createRecord('gecko', {
date: new Date(),
type: "gecko",
});

/*
Here ember-data expects a payload like this:
gecko: {id: 1, date: "", type: "gecko"}
The id is generated by your backend
*/
gecko.save().then(function(gecko){
console.log(gecko.get('id'))
})

关于javascript - Ember Data 不为新实例创建 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30546908/

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