专栏首页Python程序员杂谈backbonejs1.0.0数据模型验证部分代码更新set和save的使用

backbonejs1.0.0数据模型验证部分代码更新set和save的使用

数据验证部分更新到backbone.js1.0.0

经常有网友问说为啥你的代码不能执行,如果你是完全copy我的代码,那基本上不会出错,我的代码都是能正常运行之后才会放上来的。至于很多人不能运行的原因我猜测只是大家只是把我的js部分代码拿走,没有看完整的上下文,我之前的代码没有注意版本问题,很多都是基于backbone0.3.x写的。如果你用了最新的版本那可能有些部分会出错,毕竟backbone也会不断的改进修复之前的一些问题。

比如说那篇文章 backbone中的model实例 <http://www.the5fire.com/3-backbone-model.html>_ 上面第5部分的数据验证,backbone在set中并没有默认的触发验证,而在之前应该是默认的(我只看了最新版的backbone源码),在save时会触发验证。推荐大家在遇到问题的时候可以直接看源码,backbone的代码是比较好读懂的。

说回正题,要解决那个set时验证的问题只需要在set时加一个参数 set({name:''},{'validate':true} 就行了,代码如下:

.. code:: html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>the5fire-backbone-model</title>
    </head>
<body>

</body>
<script src="http://backbonejs.org/test/vendor/jquery.js"></script>
<script src="http://backbonejs.org/test/vendor/underscore.js"></script>
<script src="./backbone.js"></script>
<script>
    (function ($) {
    Man = Backbone.Model.extend({
        initialize: function(){
            alert('Hey, you create me!');
            //初始化时绑定监听
            this.bind("change:name",function(){
                var name = this.get("name");
                alert("你改变了name属性为:" + name);
            });
        },

        defaults: {
            name:'张三',
            age: '38'
        },

        validate:function(attributes, options){
            if(attributes.name == '') {
                return "name不能为空!";
            }
        },
        aboutMe: function(){
            return '我叫' + this.get('name') + ',今年' + this.get('age') + '岁';
        }
    });

    var man = new Man;
    man.on('invalid', function(model, error){
        alert(error);
    });
    man.set({name:''});
    //man.set({name:''}, {'validate':true});  //手动触发验证
    //man.save(); //save时触发验证。根据验证规则,弹出错误提示。

    })(jQuery);
    </script>
</html>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Struts2 Wildcard 和DMI

    关于Struts2 Action中的最基本method配置我就不说,那个比较死板。关于这个method有两个动态调用Action方法的方法:WildCard(...

    the5fire
  • 7、backbone实例todos分析(一)

    ​经过前面的几篇文章,backbone中的model,collection,router,view,都简单的讲了一下,我觉得看完这几篇文章,你应该达到的水平,或...

    the5fire
  • python中的__call__,把类实例当函数使

    看django源码时,看到了这样的一个用法,不知道是什么意思,于是查了下,发现这么个用法,直接把实例化后的类当函数来使,果然是强悍的函数式编程。

    the5fire
  • JavaScript 面向对象(封装、继承、多态)多种方式实现完全总结

    封装就是把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。 创建对象实现封装可...

    csxiaoyao
  • Typecho开启伪静态并隐藏index.php

    用Typecho的都知道域名后面会加一个index.php,很多人都接受不了这种丑陋东西 例如下网址:https://blog.hacther.cn/index...

    HCG_Sky
  • (转)ES6新特性概览

    ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本...

    前端黑板报
  • NTP网络时钟同步的重要性

    NTP网络时间同步技术必定将是整个大数据处理系统的重要支撑和保障。时间同步技术使数据产生与处理系统的所有节点具有全局的、统一的标准时间,从而使系统中的所有各种消...

    NTP网络同步时钟
  • 对数据进行一些基本操作(四)

    完整代码 ↓ ↓ ↓ ↓ github地址:https://github.com/jgsrty/jianshu_node 码云地址:https://gite...

    RtyXmd
  • 【前端性能】高性能滚动 scroll 及页面渲染优化

    Sb_Coco
  • 前端高性能滚动 scroll 及页面渲染优化

    最近在研究页面渲染及web动画的性能问题,以及拜读《CSS SECRET》(CSS揭秘)这本大作。

    哲洛不闹

扫码关注云+社区

领取腾讯云代金券