我在路线上有一个createDocument动作。该操作会创建一条记录并尝试将其保存在服务器上。
如果服务器发回错误,我想从商店中删除记录。
这是一段代码:
App.ProjectsmanageRoute = Ember.Route.extend({
model : function(){
return this.store.find('document');
},
actions : {
createDocument : function(){
var store=this.store;
var doc = store.createRecord('document', {
title: "New"
});
this.set('currentDoc', doc);
doc.save().then(this.newDocSuccess, this.newDocFailure);
}
},
newDocSuccess: function () {
this.transitionTo('editdocument', this.get('currentDoc'));
},
newDocFailure: function () {
console.log("Error when creating document");
console.log(this.get('currentDoc'));
this.store.deleteRecord(this.get('currentDoc'));
this.set('currentDoc', null);
}
});
错误消息在控制台中正确显示。但无论如何我的记录都没有从商店中删除。
这段代码有什么问题?他们是另一种处理保存记录错误的方法吗?
感谢您的回答。
答案 0 :(得分:1)
我完全错过了明显的问题,deleteRecord
之后你需要致电save
。此外,商店没有必要,你可以在记录上做到。
this.get('currentDoc').deleteRecord();
this.get('currentDoc').save();
答案 1 :(得分:0)
经过多次测试,我明白这是一个Javascript问题而不是Ember问题。由于我将路由函数作为then()的回调附加,因此这些函数中的“this”关键字没有指向任何东西。
我必须像这样转换代码
App.ProjectsmanageRoute = Ember.Route.extend({
// ...
actions : {
createDocument : function(){
var store=this.store;
var doc = store.createRecord('document');
this.set('currentDoc', doc);
// The context will change, register this as that
that = this;
// Registering anonymous function as callback that call the
// route's functions
doc.save().then(
function () {
that.newDocSuccess();
},
function () {
that.newDocFailure();
}
);
},
},
newDocSuccess: function () {
this.transitionTo('editdocument', this.get('currentDoc'));
},
newDocFailure: function () {
var currentDoc = this.get('currentDoc');
alert("Error when creating document");
currentDoc.deleteRecord();
currentDoc.save();
this.set('currentDoc', null);
}
});
不管怎么说,如果他们处理这个问题比在then()中注册2个匿名函数更好。