我定义了一个模型'person'(以及一个'人''集合),它有两个字段 - firstName和lastName。有创造人的观点和编辑现有人的另一种观点。您可以对两个视图执行的唯一操作是设置名称。负责任的代码如下:
创建视图
create: function () {
var form = $(this.el).find("#add_form");
this.model = window.persons.create({
firstName: form.find("#firstname").val(),
lastName: form.find("#lastname").val()
}, {
success: function(){
alert("success");
window.router.navigate("overview", {trigger: true});
},
error: function() {
alert("error");
}
});
}
更新视图
update: function () {
var form = $(this.el).find("#edit_form");
this.model.set({
firstName: form.find("#firstname").val(),
lastName: form.find("#lastname").val()
});
this.model.save(null, {
success: function(){
alert("success");
window.router.navigate("overview", {trigger: true});
},
error: function() {
alert("error");
}
});
}
模型的验证逻辑
validate: function(attrs) {
var errors = [];
if (!attrs.firstName || attrs.firstName.trim() === "") {
errors.push({name: 'firstName', message: '...'});
}
if (!attrs.lastName || attrs.lastName.trim() === "") {
errors.push({name: 'lastName', message: '...'});
}
//alert(errors.length);
return errors.length > 0 ? errors : false;
}
我正在使用localStorage模块而不是服务器上的rest接口。
创建模型按预期工作 - 如果有firstName和lastName,我只能创建一个新人。在这种情况下,路由器会将我转发给“概述”。否则,没有任何反应(警报除外)。
不幸的是,编辑人员总是会导致成功回调,即使我将两个名字都设置为空字符串也是如此。这意味着我可以通过路由器转发,但不应该发生。 但是:在这种情况下,localStorage中的模型不会更新,因此验证工作正常。当点击保存按钮时,验证逻辑被调用四次,第一次返回长度为>的错误数组。 0,其他三次返回false。
为什么我总能获得成功回调?
修改
我将backbone.js和underscore.js更新到最新版本并且行为已更改。如果没有理由,成功回调就不再被调用,但是也没有调用错误回调 - 在这种情况下它什么也没发生。
答案 0 :(得分:0)
使用isValid()
方法。运行validate以检查模型状态。
答案 1 :(得分:0)
我似乎误解了错误回调;如果发生验证错误,则不会被调用。模式看起来像这样:
model.save({
// ...
}, {
success: function() {
// gets called if EVERYTHING is okay
},
error: function() {
// gets called if XHR errors or similar things occur
// doesn't take validation errors into account
}
});
if (this.model.validationError) {
// this is for validation errors
}