У меня есть модели, определенные как:выполняет откат на модели с hasMany отношения
App.Answer = DS.Model.extend({
name: DS.attr('string'),
layoutName: DS.attr('string')
});
App.Question = DS.Model.extend({
name: DS.attr('string'),
answers: DS.hasMany('answer', {async: true})
});
У меня есть компонент, который позволяет удалять и добавлять ответы на вопрос модели. Компонент поставляется с кнопкой приложения и отмены, и когда пользователь нажимает на отмену, я хотел, чтобы все изменения (добавления/удаления ответов) были отменены. В настоящее время откат не делает трюк, I событие пробовал model.reload() при использовании адаптера отдыха, и это тоже не сработало для меня. Любая идея, как я могу сделать откат в этой ситуации?
При использовании адаптера покоя, я в значительной степени падение к вопросу указал здесь: EmberJS cancel (rollback) object with HasMany
Спасибо, Ди
UPDATE:
Поскольку я не смог выполнить откат предполагаемому пути , Я выполнил следующие шаги:
1) get all the answers back from the server
2) remove answer association from the question
3) manually add answer association to the question model from data received from server
Это, кажется, хорошо работает, но, к сожалению, Я получаю эту ошибку, которую я не могу стряхнуть.
Вот jsbin обновленного прогресса: http://jsbin.com/uWUmUgE/2/
Здесь вы можете создать новый ответ, а затем добавить его вопрос и не откатить тоже. НО, если вы будете следовать этим шагам, Вы увидите вопрос я столкнулся:
1) delete an answer
2) add an answer
3) perform rollback
4) add an answer
Он выдает эту ошибку: Ошибка: Попытка обработать событие didSetProperty
на некоторое время в состояние root.deleted.uncommitted. Вызывается с помощью {name: position, oldValue: 1, originalValue: 1, value: 2}.
Я буду признателен за любую помощь, которую вы можете предоставить.
обходным:
Один простой обходной путь был просто скрыть ответы на удаление. Я модифицировал модель немного напоминает:
App.Answer = DS.Model.extend({
name: DS.attr('string'),
layoutName: DS.attr('string'),
markToDelete: DS.attr('boolean', {default: false})
});
И моя функция отката была эта логика:
answers.forEach(function (answer) {
if(!answer.get('id')){
//newly created answer models that has not persisted in DB
question.get('answers').removeObject(answer);
answer.deleteRecord();
} else {
answer.rollback();
}
});
Hi @Toran благодарит за ответ. Когда я пытаюсь получить контекст из моего компонента, который обрабатывает откат, он возвращает сам экземпляр компонента. Что вы получаете в контексте вашего дела? –
ах, извините, мой пример из-за маршрута (я еще ничего не сделал с компонентом, поэтому я не уверен, как это будет похоже/или нет) –