[Java教程]移动前端开发中的Backbone之一:Backbone中的模型和集合

0 2015-09-24 17:00:04

当我们开发含有大量Javascript的web应用程序时,首先你需要做的事情之一便是停止向DOM对象附加数据。 通过复杂多变的jQuery选择符和回调函数很容易创建Javascript应用程序,包括在HTML UI,Javascript逻辑和数据之间保持同步,都不复杂。 但对富客户端应用来说,良好的架构通常是有很多益处的。

通过Backbone,你可以将数据呈现为 Models, 你可以对模型进行创建,验证和销毁,以及将它保存到服务器。 任何时候只要UI事件引起模型内的属性变化,模型会触发"change"事件; 所有显示模型数据的Views会接收到该事件的通知,继而视图重新渲染。

一、Model简介

Model是任何JavaScript应用的核心,包括数据交互及与其相关的大量逻辑:转换、验证、计算属性和访问控制。

1、Model的建立:1  var Model=Backbone.Model.extend({2 defaults:{3 name:"Cowen",4 age:285 }6 });7 var model=new Model();

2、defaults默认属性:

在model中我们可以使用defaults来建立模型层中的默认属性,这些属性在模型层中使用attributes集合进行遍历。1 var Model=Backbone.Model.extend({2 defaults:{3 name:"Cowen",4 age:285 }6 });7 var model=new Model();8 console.log(model.attributes)//Object {name: "Cowen", age: 28}

3、initialize初始化:

Initialize使用在模型初始化之后,一般可以用于事件的绑定。1 var Model=Backbone.Model.extend({ 2 defaults:{ 3 name:"Cowen", 4 age:28 5 }, 6 initialize:function(){ 7 console.log('初始化'); 8 } 9 });10 var model=new Model();

4、Model的读值get和赋值set:

模型在读取属性值和赋值时分别使用get和set方法,其中get直接读取属性值名称,set则是利用json对的形式进行赋值。get取值时一定要确定model中是否已存在该属性值,而set赋值则有可能是赋新值也有可能是替换默认值。var Model=Backbone.Model.extend({ defaults:{ name:"Cowen", age:28 } }); var model=new Model(); model.set({'name':"郑昊"});//替换默认值 model.set({'sex':"male"});//赋新值 console.log(model.attributes);//Object {name: "郑昊", age: 28, sex: "male"}

5、has方法:

模型中的has()方法主要是用来判读模型中是否存在指定的属性值。返回的是一个布尔类型的数据。var Model=Backbone.Model.extend({ defaults:{ name:"Cowen", age:28 } }); var model=new Model(); console.log(model.has("sex"));//false

6、validate校验:

Backbone继承自underscore.js中的validate方法,用来在执行invalid事件时会触发validate的检验。在对model进行属性赋值时,我们可以使用isvalid()来检验set的属性值是否符合validate校验。1 var Model=Backbone.Model.extend({ 2 validate:function(attributes){ 3 if(attributes.age<18){ 4 return "您未满18周岁"; 5 } 6 If(attributes.age>60){ 7 return "您的年龄太大" 8 } 9 }10 });11 var model=new Model();12 model.set({'age':40});13 console.log(model.isValid());//true

如果我们需要显示出validate校验返回的错误提示,则这个时候我们在对属性值进行set赋值时要手动触发invalid事件。当然,前提是model在initialize初始化时已经对invalid事件进行了bind绑定。1 var Model=Backbone.Model.extend({ 2 initialize:function(){ 3 this.bind("invalid",function(model,error){ 4 console.log(error); 5 }); 6 }, 7 validate:function(attributes){ 8 if(attributes.age<18){ 9 return "您未满18周岁";10 }11 if(attributes.age>60){12 return "您的年龄太大";13 }14 }15 });16 var model=new Model();17 model.set({'age':400},{'validate':true});//返回的是"您的年龄太大"

在对model执行save()方法时,也会自动触发invalid事件,进行validate校验。1 var Model=Backbone.Model.extend({ 2 initialize:function(){ 3 this.bind("invalid",function(model,error){ 4 console.log(error); 5 }); 6 }, 7 validate:function(attributes){ 8 if(attributes.age<18){ 9 return "您未满18周岁";10 }11 if(attributes.age>60){12 return "您的年龄太大";13 }14 }15 });16 var model=new Model();17 model.save({'age':17});// 返回的是"您未满18周岁";

二、Collection简介

承接上一节我们学习过的Backbone中的模型(Model),我们不可能使用单个Model来描述业务层中所有的数据类型,需要使用Model的集合Collection来表示有序的集合。

1 //定义模型层--Model 2 var Person=Backbone.Model.extend({ 3 defaults:{ 4 name:'', 5 age:0 6 } 7 }); 8 //定义集合层--Collection 9 var Persons=Backbone.Collection.extend({10 model:Person11 });12 var p1=new Person({name:'cowen'});13 var p2=new Person({name:'zhenghao'});14 var persons=new Persons();15 //将模型层添加到集合层16 persons.add(p1);17 persons.add(p2);

1、model属性:

制定集合层中的model类型,可以直接在Collection中指定,也可以在创建Collection时再指定。

2、models属性:

集合在创建后,自动创建一个models属性,在该属性中保存着添加到集合中的model数组,我们可以使用该属性值获得指定索引位置上的model模型实例。

//定义模型层--Model var Person=Backbone.Model.extend({ defaults:{ name:'', age:0 } }); //定义集合层--Collection var Persons=Backbone.Collection.extend({ model:Person }); var p1=new Person({name:'cowen'}); var p2=new Person({name:'zhenghao'}); var persons=new Persons(); //将模型层添加到集合层 persons.add(p1); persons.add(p2); console.log(persons.models[0].get('name'));//Cowen

3、add()和remove()方法:

使用add()方法可以向collection集合中添加model模型,相反使用remove()方法可以从集合中删除相应的model。

4、at()方法:

使用at()方法可以获取指定索引位置的model对象,类似于使用models[index]。

5、where查询和findwhere查询:

在collection中可以使用where关键字查询,返回集合中所有匹配所传递 attributes(属性)的模型数组;而findWhere直接返回匹配所传递 attributes(属性)的第一个模型。

1 //定义模型层--Model 2 var Person=Backbone.Model.extend({ 3 defaults:{ 4 name:'', 5 age:0 6 } 7 }); 8 //定义集合层--Collection 9 var Persons=Backbone.Collection.extend({10 model:Person11 });12 var p1=new Person({name:'cowen',age:18});13 var p2=new Person({name:'zhenghao',age:29});14 var p3=new Person({name:'lily',age:30});15 var persons=new Persons();16 //将模型层添加到集合层17 persons.add(p1);18 persons.add(p2);19 persons.add(p3);20 console.log(persons.where({age:29}).length);

本文网址:http://www.shaoqun.com/a/144964.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

前端

0

java backbone_[Java教程]移动前端开发中的Backbone之一:Backbone中的模型和集合相关推荐

  1. java web打包神器_前端开发人员的桌面应用神器 Electron

    原标题:前端开发人员的桌面应用神器 Electron 01 为什么用 Java 来开发桌面应用? 曾经的 Java 脆弱.简陋.甚至有被边缘化的危险,不过 Java 在经过了两次飞跃后(以 V8 为首 ...

  2. 前端还是java哪个更累_前端开发和后端开发的区别?这两者哪个更累?

    前端开发和后端开发的区别有哪些?前端开发和后端开发哪个做起来更累?对于刚接触开发的朋友可能会有这样的疑问,下面就一起来了解下吧! 1.前端开发: 网站的"前端"是与用户直接交互的部 ...

  3. 自己开发html组态软件教程,《前端开发》第二节:10天教你学会用Html和CSS写简单网页...

    常用编写软件 我平时喜欢用的就两个:HBuilder X和Visual Studio Code百度搜索就能下载,都是免费的.安装后也很好用.初学者容易上手. 今天说说Html,一般我们经常的页面大致包 ...

  4. css宋体代码_前端开发必备的CSS命名规范与常用CSS代码集合

    编辑 | web前端开发 来源 | web前端开发 我们在用html+css进行网页的排版布局时,经常会遇到CSS命名,如果是在团队多人协作开发时,团队里都会有自己的命名规范与要求. 但如果是自己在个 ...

  5. java的关键业绩指标_SpreadJS前端开发案例:如何利用Javasrcipt创建财务关键业绩指标表...

    下面的示例展示了如何使用SpreadJS创建商业关键业绩指标表单, 例如财务关键业绩指标表单. 这个示例主要使用了公式,单元格格式和条件格式, 以及使用fromJSON加载预定义的模板. 注意,多个表 ...

  6. 前端开发常用PhotoShop快捷键整理(更新中)

    图片来源 UI提供的psd图 印屏幕:PrScrn SysRq(键盘按键) 浏览器(插件)获取 常用的快捷键: 新建 Ctrl + N 取消选框 Ctrl + D 反选 Ctrl + shift + ...

  7. 前端开发微信公众号在ios中常遇见的问题和解决方法

    1, 问题:ios手机输入框获得焦点,软键盘弹出,当其消失后,ios页面底部会被弹出来一大片 空白, 此时,页面整个卡住,点击其他功能不生效. 而且输入框离底部越近,ios页面底部被弹出来的空白区域越 ...

  8. 微信html5页面开发教程,微信网页开发,如何在H5页面中设置分享的标题,内容以及缩略图...

    前言 最近的需求是做一个移动端H5的长屏广告页,最后需要在微信分享的时候修改文案以及带上图片,这个实现起来也不是很复杂. 实现步骤 先绑定域名,先登录微信公众平台进入"公众号设置" ...

  9. 广州牵引力教育详细分析学习Java能从事前端开发吗?

    相信很多从事互联网的人都知道,Java开发属于后端开发,那么也会有人问:学习Java能够从事前端开发吗?其实一般来说,只要你具备了一两年的后端开发经验转前端开发,相比那些只是通过编写页面进入前端的人会 ...

最新文章

  1. kylin3.x安装,解决load hive表的时候提示shaded-guava问题
  2. 【Linux】一步一步学Linux——ethtool命令(155)
  3. OD-标志寄存器判断语句对照表(汇编标志位寄存器对照表)
  4. docker数据卷的使用 -v --volumes--from
  5. python命令行解析库——argparse库的使用
  6. 转换大师swf转html,iPixSoft SWF to HTML5 Converter
  7. 【时间序列分析】02.线性平稳序列
  8. 设置Windows系统双网卡同时上内外网
  9. 快手面试官:分布式环境下,如何实现session共享?
  10. Word2013怎样从任意页开始设置页码
  11. 手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)
  12. HinM_COMPILER_cale计划和实现
  13. 如何在指板上寻找特殊和弦
  14. 高清屏智能手表PSRAM存储芯片APS6404L-SQR-ZR
  15. MAC Book Pro 使用 libmodbus
  16. 种一棵树最好的时间,是十年前,其次是现在
  17. 【论文阅读】PSPNet(Pyramid Scene Parsing Network)
  18. 有符号拓展:signed-extending无符号拓展:unsigned-extending
  19. 响铃:视频彩铃,会是下一个短视频生态的入口吗?
  20. EMC | 静电放电抗扰度试验与整改

热门文章

  1. C++const的作用与使用
  2. java 鼠标绘图,教您如何用JAVA程序实现鼠标绘图
  3. java做a_Java编程实现A*算法完整代码
  4. python pos函数_使用python+sklearn实现特征提取
  5. html日期写入数据库,javascript – 在HTML5 Web SQL数据库中对日期时间进行排序
  6. 使用procd执行进程
  7. js截取最后一个斜杠之后的内容
  8. 使用BootStrapValidator来完成前端输入验证
  9. Yii 框架学习--01 框架入门
  10. JQ 实现点击按钮显示弹窗,点击非弹窗和按钮区域隐藏弹窗