backbone.js之Model篇 简单总结和深刻(2)

1、模型属性的一些操做方法git

  一、mmodel.get()   获取属性的值github

  二、mmodel.set('age',5)  更新单个属性的值安全

     mmodel.set({name:'aaa',age:6})  更新多个属性的值this

     在设置属性值时,若是该属性不存在,会自动建立该属性;同时会以true的形式返回一个模型的引用。spa

  三、mmodel.unset('age')  从模型中删除一个属性3d

  四、mmodel.clear()   从模型中删除全部的属性code

  五、mmodel.has('age')   检查是否存在某一属性blog

  六、mmodel.isValid()   手动触发验证,只会返回true或者false,但不会触发invalid事件

  

2、HTML转义后的属性值ip

  若是用户输入的文字不是纯文本格式,可能会有一些致使XSS注入攻击的安全漏洞,解决的办法就是任何用户输入文字以前使用escape()

1 var  testModel =  new Backbone.Model({
2     name : "<script>alert(11)</script>"
3 });
4 
5 var escaped_name = testModel.escape('name');

3、重写setter 方法和 getter方法

  一、使用缘由:

    (1 属性须要变化格式进行存储

    (2 须要一个模型虚拟属性,依赖于其余属性

    (3  防止把非法的值赋值给模型属性

  二、操做:须要引入mutators.js,到https://github.com/asciidisco/Backbone.Mutators下载 backbone.mutators.js 文件,而后引入到项目中

  三、缘由(2)demo:

 1 (function($){
 2     
 3         var testModel = Backbone.Model.extend({
 4 
 5             
 6  mutators:{
 7                 fullMessage : {
 8                     get: function(){
 9                         return this.get('name') + ' -and-' + this.get('age');
10                         //return this.name + ' -hh-' + this.age;
11                     }
12                 }
13             }
14         });
15         
16         var t = new testModel;
17         t.set({
18             name :'Axiba',
19             age : 33
20         });
21         alert(t.get('fullMessage'));
22         alert(t.get('name'));
23         
24     })(jQuery);

  四、反过来,重写setter方法的demo,注意key和value:

 1 (function($){
 2     
 3         var testModel = Backbone.Model.extend({
 4 
 5             
 6  mutators:{
 7                 fullMessage : {
 8                     get: function(){
 9                         return this.get('name') + '-and-' + this.get('age');
10                     },
11                     set: function(key, value, options, set){
12                         var message = value.split('-and-');
13                         this.set('name',message[0],options);
14                         this.set('age',message[0],options);
15                     }
16                 }
17             }
18         });
19         
20         var t = new testModel;
21         t.set({
22             name :'Axiba',
23             age : '33'
24         });
25         
26         t.set('fullMessage','daomul-and-11');
27         
28         alert(t.get('fullMessage'));
29         alert(t.get('name'));
30         alert(t.get('age'));
31         
32     })(jQuery);

  五、值得注意的是:

    (1 若是是在建立新模型的时候给属性赋值,没有触发到change事件的话,其对应的setter方法是不会触发的。

    (2 新的方法会试图先调用被重写的getter和setter方法,再去调用原始的get() 和 set()

相关文章
相关标签/搜索