1

设置验证失败的数据

Model.set({phoneNumber : 'meow meow'})

应用边框颜色的验证

validate: function(attr){
    if(attr.phoneNumber){
        var phoneNumber = attr.phoneNumber,
            regex = /^\([0-9]{3}\)\s[0-9]{3}-[0-9]{4}/;
        if(!regex.test(val)){
            View.showError('businessNumber');
        }
}
  • 后来用户focus在输入字段上,我删除了错误样式
  • 用户没有改变任何东西并且blur事件被触发
  • 验证不会运行,因为没有任何改变。
4

1 回答 1

1

不要直接从您的模型中引用您的视图。这是对模型/视图/*设计核心原则的彻底和根本性的违反。当您调用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),但开箱即用这不是显而易见/简单的部分之一骨干。

于 2013-01-18T06:05:28.980 回答