backbone.js之Model篇 简单总结和深入(2)
一、模型属性的一些操作方法
1、mmodel.get() 获取属性的值
2、mmodel.set('age',5) 更新单个属性的值
mmodel.set({name:'aaa',age:6}) 更新多个属性的值
在设置属性值时,如果该属性不存在,会自动创建该属性;同时会以true的形式返回一个模型的引用。
3、mmodel.unset('age') 从模型中删除一个属性
4、mmodel.clear() 从模型中删除所有的属性
5、mmodel.has('age') 检查是否存在某一属性
6、mmodel.isValid() 手动触发验证,只会返回true或者false,但不会触发invalid
二、HTML转义后的属性值
如果用户输入的文字不是纯文本格式,可能会有一些导致XSS注入攻击的安全漏洞,解决的办法就是任何用户输入文字之前使用escape()
1 var testModel = new Backbone.Model({ 2 name : "<script>alert(11)</script>" 3 }); 4 5 var escaped_name = testModel.escape('name');
三、重写setter 方法和 getter方法
1、使用原因:
(1 属性需要变化格式进行存储
(2 需要一个模型虚拟属性,依赖于其他属性
(3 防止把非法的值赋值给模型属性
2、操作:需要引入mutators.js,到https://github.com/asciidisco/Backbone.Mutators下载 backbone.mutators.js 文件,然后引入到项目中
3、原因(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);
4、反过来,重写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);
5、值得注意的是:
(1 如果是在创建新模型的时候给属性赋值,没有触发到change事件的话,其对应的setter方法是不会触发的。
(2 新的方法会试图先调用被重写的getter和setter方法,再去调用原始的get() 和 set()