一、模型属性的一些操作方法

  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()

 var  testModel =  new Backbone.Model({
name : "<script>alert(11)</script>"
}); 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:

 (function($){

         var testModel = Backbone.Model.extend({

             mutators:{
fullMessage : {
get: function(){
return this.get('name') + ' -and-' + this.get('age');
//return this.name + ' -hh-' + this.age;
}
}
}
}); var t = new testModel;
t.set({
name :'Axiba',
age : 33
});
alert(t.get('fullMessage'));
alert(t.get('name')); })(jQuery);

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

 (function($){

         var testModel = Backbone.Model.extend({

             mutators:{
fullMessage : {
get: function(){
return this.get('name') + '-and-' + this.get('age');
},
set: function(key, value, options, set){
var message = value.split('-and-');
this.set('name',message[0],options);
this.set('age',message[0],options);
}
}
}
}); var t = new testModel;
t.set({
name :'Axiba',
age : '33'
}); t.set('fullMessage','daomul-and-11'); alert(t.get('fullMessage'));
alert(t.get('name'));
alert(t.get('age')); })(jQuery);

  5、值得注意的是:

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

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

backbone.js之Model篇 简单总结和深入(2)的更多相关文章

  1. Backbone.js之model篇(一)

    Backbone.js之model篇(一) Backbone 是一个前端 JS 代码 MVC 框架,它不可取代 Jquery,不可取代现有的 template 库.而是和这些结合起来构建复杂的 web ...

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

    “Model是js应用的核心,包括基础的数据以及围绕着这些数据的逻辑:数据转换.验证.属性计算和访问控制”. 一.初始化方法 我们先来看一个demo,initialize,这是一个初始化方法,但是写这 ...

  3. [Backbone.js]如何处理Model里面嵌入的Collection?

    写了近半个月的backbone.js代码,从一开始的todo到现在做仿微信的网页聊天,其中最大的困惑就在于如何处理比较复杂的Model,其内嵌了一个或者多个Collections. 假设我们有一个Pe ...

  4. Backbone学习笔记 - Model篇

    2 Model 在Backbone中,Model用于存储核心数据,可以将数据交互相关的逻辑代码放在这里.基本形式如下: var Human = Backbone.Model.extend({ init ...

  5. Backbone之旅——Model篇

    Backbone作为前端的MVC框架,把后端的设计思想带到前端,使前端代码更加清晰.可维护性大大提高 Backbone依赖于underscore.js和jquery,所以在使用backbone的时候一 ...

  6. js学习第二篇简单语法

    字符串(String)字面量 可以使用单引号或双引号 数组(Array)字面量 定义一个数组: [40, 100, 1, 5, 25, 10] 对象(Object)字面量 定义一个对象: {first ...

  7. Backbone.js 中使用 Model

    前面几篇 Backbone.js 的例子中有使用到 template, 及数据的填充,其实这已经很接近 Model 了.现在来学习怎么创建自己的 Model 类,并简单的使用.Backbone.js ...

  8. backbone.js 教程(1) View & Model & Collection

    Backbone.js Overview 它由Jeremy Ashkenas开发,最初发行于2010-10-13 它是一个轻量的JavaScript类库,只依赖于underscore.js,非强制依赖 ...

  9. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

随机推荐

  1. Node.js之exports与module.exports

    每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {} module.exports = {}; Node.js为了方 ...

  2. python字符串 分片索引

    字符串是字符的有序集合,可以通过其位置来获得具体的元素.在python中,字符串中的字符是通过索引来提取的,索引从0开始. python可以取负值,表示从末尾提取,最后一个为-1,倒数第二个为-2,即 ...

  3. js中===与==区别

    本文出自:http://www.cnblogs.com/yiki/archive/2012/05/08/2489687.html 1.对于string,number等基础类型,==和===是有区别的 ...

  4. SpringBoot------注解把配置文件自动映射到属性和实体类

    1.映射到属性 package top.ytheng.demo.controller; import org.springframework.beans.factory.annotation.Valu ...

  5. Eclipse------启动Server时出现弹窗Server at localhost was unable to start within 45 seconds.

    弹窗详细信息: Server Tomcat v8. Server at localhost was unable to start within seconds. If the server requ ...

  6. GDAL------加载Shapefile文件

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...

  7. Java查看类的成员

    在一个类的内部,一般包括以下几类成员:成员变量.构造方法.普通方法和内部类等.使用反射机制可以在无法查看源代码的情况下查看类的成员.编写程序,使用反射机制查看ArrayList类中定义的成员变量.构造 ...

  8. RF中采用python方法获取当月1号、上月1号、下月1号、当前日期N天后日期、当前日期N天前日期、指定月份总天数、上个月份、下个月份、当月最后1天日期、上个月最后1天日期、下个月最后1天日期

    ${TodayDate} evaluate datetime.date.today().strftime('%Y%m%d') datetime ${CurrentMonthFirstDay} eval ...

  9. Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:25:5-27:41 to override.

    记录下来少走些坑吧 一:不管用 tools:replace="android:icon,android:theme" xmlns:tools="http://schema ...

  10. Myeclipse10使用git

    用Myeclipse安装egit,使用官网最新地址或者下载最新的egit插件到本地安装均在team中看不到git,最后发现到http://download.eclipse.org/egit/updat ...