不要直接从您的模型中引用您的视图。这是对模型/视图/*设计的核心原则的彻底和根本性的违反。当您调用set
并且验证失败时,模型将发出一个error
事件(从 Backbone 0.9.9 开始),您的视图应该通过相应地更新视图来监听和响应该事件。您也可以交替传递回调来set
处理错误,但在大多数情况下,事件是更好的选择。请注意,您的模型实际上需要从 中返回一个错误对象validate
,该对象将拒绝更新数据,因此在用户修复输入并blur
发生后,数据实际上会发生变化。使用您的代码,Backbone 认为validate
调用成功,因为没有返回错误。
在您看来,这里有一些伪代码展示了如何将模型的错误对象转换为 UI 警告:
initialize: function () {
_.bindAll(this);
this.model.on('error', this.showError);
},
showError: function (error) {
if (error.businessNumber) {
this.$businessNumber.addClass('error');
}
}
作为旁注,不要对如何使用主干表单感到困惑。开箱即用set
不会接受无效数据的事实是一个巨大的绊脚石,而且不直观。有一些插件可以帮助表单和验证(https://github.com/documentcloud/backbone/wiki/Extensions,-Plugins,-Resources),但开箱即用这不是显而易见/简单的部分之一骨干。