Я создал прототип приложения Ember с помощью адаптера локального хранилища.
Сейчас я пытаюсь преобразовать приложение для использования адаптера Ember Data REST с внутренним хранилищем.
В версии приложения для локального хранилища Ember генерирует идентификатор для новой записи перед ее сохранением (а также даже в том случае, если запись никогда не сохраняется).
Например, в моем приложении для локального хранения я могу зарегистрировать идентификатор в обоих местах.
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 для внутреннего хранилища, идентификатор не регистрируется.
Когда я проверяю данные, которые Ember отправляет на сервер, идентификатор не включается (вероятно, потому, что идентификатор никогда не был сгенерирован).
Вот json, который Ember отправляет на мой сервер
gecko: { type: "alloc", date: "2015-05-30T13:28:27.539Z"}
Я предполагаю, что я должен сохранить идентификатор, сгенерированный Ember, на моем сервере (что, конечно, позволит ему получить запись по идентификатору, если мой сервер реализует это).
Вопрос: почему не генерируется идентификатор?
это код
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 так, чтобы оно могло отправлять запись на сервер POST, а затем я реализую маршрут для ее получения с помощью return this.store.find('gecko')
.
save
возвращает обещание это будет разрешено, когда адаптер успешно вернется, передав обратному вызову модель, которая была сохранена в вашей базе данных. 30.05.2015