#javascript #ruby-on-rails #ember.js
#javascript #ruby-on-rails #ember.js
Вопрос:
Я выполнил 3 части руководства здесь, и все работает нормально, за одним исключением. Когда я перехожу на страницу «Добавить книгу», а затем перехожу к разделу «Список книг» без сохранения, список книг расширяется на пустой элемент. Я подозреваю, что причиной является следующий код, в котором новая модель создается перед сохранением и не удаляется, если не сохраняется форма. Есть идеи, как это исправить?
Embertest.BooksNewRoute = Ember.Route.extend({
model: function() {
return this.get('store').createRecord('book');
},
actions: {
create: function() {
var newBook = this.get('currentModel');
newBook.save();
this.transitionTo('books');
}
}
});
Ответ №1:
Из http://emberjs.com/api/classes/Ember .Route.html#метод_deactivate
Добавьте deactivate
функцию в свой маршрут. Это вызывается перед выходом из этого текущего маршрута. Таким образом, вы можете откатить запись, которую вы только что создали в модели, следующим образом:
model: function(params) {
return this.get('store').createRecord('book');
},
deactivate: function() {
this.currentModel.rollback();
},
Комментарии:
1. У меня это не работает — деактивация не вызывается, если я перемещаюсь со страницы.
2. Вы уверены, что поместили ее в маршрут?
3. ДА. Я предполагаю, что это не работает, потому что я как бы остаюсь на том же маршруте при переходе из-за вложенных ресурсов (т. Е. /posts/new -> /posts ).
4. затем вы можете просто добавить приведенный выше код в /posts/new.js маршрут. Это работает для меня с моей стороны.
Ответ №2:
Я решил это, присоединив действие для уничтожения записи к событию willTransition, как показано ниже. Кто-нибудь прокомментирует, правильный ли это подход?
Embertest.BooksNewRoute = Ember.Route.extend({
model: function() {
return this.get('store').createRecord('book');
},
actions: {
willTransition: function() {
if (this.currentModel.get('isNew')) {
this.get('currentModel').deleteRecord();
};
},
create: function() {
var newBook = this.get('currentModel');
newBook.save();
this.transitionTo('books');
}
}
});