《开始学Backbone.js》之第三章Backbone Models与Collections(五)

     本文内容接上篇博客内容

 

   模型验证

      Backbone提供为模型的数据提供了一个验证机制,意味着可以在模型中包含判断模型的状态是否正确的所有逻辑,而不用通过外部的JavaScript或表单处理代码。

 

      如果提供了验证函数,那么该函数会在每次调用.save方法时执行,而且在提供了{validate:true}作为可选参数的set/unset操作过程中也会执行该验证函数。

 

      假设我们的Book模型坚持name属性必须存在且year属性的值需是2000年以后。该规则的一个验证方法可以写成:

Book = Backbone.Model.extend({
    initialize: function(){},
    defaults: function(){},
    printDetails: function(){},
    validate: function(attrs){
         if(attrs.year < 2000){
             return 'Year must be after 2000';
         }
         if(!attrs.name){
             return 'A name must be provided';
         }
    }
});

     在操作模型的过程中如果违反这些规则,则试图修改属性值的操作将失败。

//试图把year属性设置为2000年之前
thisBook.set('year', 1999, {validate: true});
console.log('Check year change: ' + thisBook.get('year'));
//试图从模型中移除name属性
thisBook.unset('name', {validate: true});
console.log('Check if name was removed ' + thisBook.get('name'));

      当检测到一个验证错误时,会触发一个事件。通过增加一个“invalid”事件监听,可以提供验证失败的反馈信息。和所有事件监听一样,这个应该加在 initialize 函数中。

Book = Backbone.Model.extend({
    initialize: function(){
        this.on('invalid', function(model, error){
            console.log('**Validation Error : ' + error + '**');
        });
    }
});

       如果不设置验证标识,通过set设置属性时验证函数就不会执行。然而,任何时候你都可以通过isValid()方法来检查模型是否有效。

//检查模型是否有效
console.log('Is model valid: ' + thisBook.isValid());
//在不使用验证标识情况下破坏有效性规则
thisBook.set('year', 1998);
//检查模型是否有效
console.log('Is model valid: ' + thisBook.isValid());

    

       本篇内容翻译自《Beginning Backbone.js》,原著作者James Sugrue。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值