【发布时间】:2013-11-26 18:39:28
【问题描述】:
我定义了一个模型“person”(和一个集合“persons”),它有两个字段 - 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 模块而不是服务器上的休息接口。
创建模型按预期工作 - 如果有名字和姓氏,我只能创建一个新人。在这种情况下,路由器会将我转发到“概览”。否则,什么都不会发生(警报除外)。
不幸的是,编辑人员总是会导致成功回调,即使我将两个名称都设置为空字符串。这意味着我被路由器转发,尽管它不应该发生。 但是:在这种情况下,localStorage 中的模型不会更新,因此验证在某种程度上是有效的。当点击保存按钮时,验证逻辑被调用了四次,第一次它返回一个长度 > 0 的错误数组,另外 3 次它返回 false。
为什么我总是收到成功回调?
编辑:
我将backbone.js 和underscore.js 更新为最新版本,并且行为发生了变化。如果没有原因,将不再调用成功回调,但也不会调用错误回调 - 在这种情况下它什么也不会发生。
【问题讨论】:
标签: javascript backbone.js backbone-views