Я реалізую подання для створення нового користувача.
App.UserNewRoute = Ember.Route.extend({
model : function(params) {
return this.store.createRecord("user");
}
});
На UserNewController є метод, який запускається, якщо користувач натискає кнопку скасування.
App.UserNewController = Ember.ObjectController.extend({
//... code
actions: {
//.. other actions
cancel: function(){
var model = this.get("model");
model.destroyRecord();
this.transitionToRoute("users");
}
}
});
Я завжди отримую таку помилку:
Uncaught Error: Attempted to handle event `willCommit` on <App.User:ember751:null> while in state root.deleted.saved.
Я спробував скористатися альтернативою:
model.deleteRecord();
model.save();
Я отримую таку ж помилку.
Що я роблю неправильно?
Відповіді:
1 для відповіді № 1Проблема може бути пов’язана з тим, що model.destroyRecord () повертає обіцянку, і що ви переходите до виконання цієї обіцянки. Я використовував наступне:
var model = this.get("model");
var _this = this;
// assuming you are working with a new model and not on say an edit page
// this will delete the new record and once the promise returns will transition routes
if (model.get("isNew")) {
model.destroyRecord().then(function() {
_this.transitionToRoute("route name");
}
}
Таким чином, перехід відбувається лише після того, як обіцянка буде виконана. Я все ще вугільний скраб, але я думав, що це не зашкодить.
0 для відповіді № 2
Відповідно до цього https://github.com/emberjs/data/issues/1669, проблема може бути виправлена в нових версіях Ember. Я використовую Ember version 1.5.1
і Ember-Data version 1.0.0-beta.6
Обхідним шляхом було зробити a dirty
перевірити
var model = this.get("model");
model.deleteRecord();
if (model.get("isDirty")) {
model.save();
}
this.transitionToRoute("users");