backBone.js之Model篇 (1) 简单实例

    “Model是js应用的核心,包括基础的数据以及围绕着这些数据的逻辑:数据转换、验证、属性计算和访问控制”。

 

一、初始化方法

  我们先来看一个demo,initialize,这是一个初始化方法,但是写这段代码之前,首先要在<head>元素中导入3个相应的库文件,即jQuery框架、Backbone主框架和依赖库Underscore。需要注意它们导入页面的顺序,由于代码是按照自上而下的顺序进行执行的,因此先导入jQuery框架文件;Backbone依赖于Underscore库,因此在导入Underscore库文件后,才导入Backbone主框架文件。

  比如说:

 

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>daomul for Axiba</title>
 5 </head>
 6 <body>
 7     <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
 8     <script src="js/underscore.js"></script>
 9     <script src="js/backbone.js"></script>
10     <script>
11 
12     (function($){
13         //Backbone通过extend来扩展实例方法和静态方法:
14         //initialize这个初始化方法,也称构造函数。这个函数会在Model被实例化时调用。
15         var People = Backbone.Model.extend({
16             initialize:function(){
17                 alert('hi , i am daomul!');
18             }
19         });
20         var person = new People;
21     })(jQuery);
22 
23     </script>
24 </body>
25 </html>

 

二、defaults 和 对象赋值方法get 和 set

  属性在一个Model是以字典(或者类似字典)的方式存在的,设定默认值的方式,只不过是实现了Backbone的defaults这个方法,或者是给defaults进行了赋值。

 1     (function($){
 2         
 3         var People = Backbone.Model.extend({
 4             initialize : function(){
 5                 alert('come on !');
 6             },
 7             defaults:{
 8                 name : ' daomul ',
 9                 age : ' 24 '
10             }
11         });
12         
13         var person = new People;
14         
15         //get获取对象的值
16         alert(person.get('age'));
17         
18         //set改变对象的值
19         person.set({phone:'134133',sex:'男'});
20         alert(person.get('sex'));
21         
22     })(jQuery);

 

三、对象中的自定义方法

  模型中的自定义方法,可以发现是通过字典的方式来构造的,方法的调用也是可以通过.语法来操作的。

 1     (function($){
 2         
 3         var People = Backbone.Model.extend({
 4             initialize: function(){
 5                 
 6             },
 7             defaults:{
 8                 country : 'China'
 9             },
10             myPrivateMethod : function(){
11                 return 'I \'m from ' + this.get('country') + ' and my name \'s ' + this.get('name');
12             }
13         });
14         
15         var person = new People;
16         person.set({name : 'Axiba'});
17         alert(person.myPrivateMethod());
18         
19     })(jQuery);

 

四、绑定监听对象中属性的变化

  通过this.bind绑定监听对象中属性值的变化,改变是通过change:name,也是字典的格式来定义的。

 1 (function($){
 2         
 3         var People = Backbone.Model.extend({
 4             initialize:function(){
 5                 alert('1');
 6                 //绑定监听
 7                 this.bind('change:name',function(){
 8                      var name = this.get('name');
 9                      alert('oh ,no u change my name to ' + name);
10                 });
11             },
12             defaults : {
13                 name : 'Axiba',
14                 age : '100'
15             }
16         });
17         
18         var person = new People;
19         person.set({name : 'Axiba2'});
20         
21     })(jQuery);

 

五、验证规则以及错误的提示

  通过下面的demo可以看出有三种方式可以触发值改变的验证:

 1     (function($){
 2         var People = Backbone.Model.extend({
 3             
 4             initialize:function(){
 5                 this.bind("invalid",function(model,error){
 6                     alert(error);
 7                 });
 8             },
 9             defaults:{
10                 name : 'Axiba',
11                 age : 11
12             },
13             validate:function(attributes){
14                  
15                 if(attributes.name == '') {
16                     return "name不能为空!";
17                 }
18             }
19         });
20         
21         var person = new People;
22         
23         //方法1 :默认set时不进行验证,save时触发验证。根据验证规则,弹出错误提示。
24         //person.set({name : ''});
25         //person.save();
26         
27         //方法2 :手动触发验证, set时会触发
28         //person.set({name:''}, {'validate':true});
29         
30         //方法3 :添加错误处理也行
31         person.on('invalid', function(model, error){
32              alert(error);
33         });
34         person.set({name : ''});
35         person.save();
36         
37     })(jQuery);*/

 

posted @ 2015-09-17 10:42  daomul  阅读(291)  评论(0编辑  收藏  举报