backbonejs中的集合篇(一)

一:集合概念

  集合是多个模型,如果把模型model理解为表结构中的行,那么集合collection就是一张表,由多个行组成。我们经常需要用集合来组织和管理多个模型。

二:创建集合

1:扩展Backbone.Collection对象,指定为哪个模型创建集合,传参数model.

  var _collection = Backbone.Collection.extend({

    model: _model

  });

2:创建集合实例,传模型数组参数来初始化; 现假定_model的dafault属性为(name,gender,age),实例对象为testModel

  var testObj = new _collection(

    [{name:‘001‘,gender:‘women‘,age:‘23‘}, {name:‘002‘,gender:‘man‘,age:‘33‘}, {name:‘003‘,gender:‘women‘,age:‘28‘}]);

在集合内部,模型被存储在一个名为models的数组中

除了数组参数来初始化,还可以用单个模型对象来初始化。

如:model1 = new _model({name:‘001‘,gender:‘women‘,age:‘23‘}); model2 = new _model({name:‘002‘,gender:‘man‘,age:‘33‘});

  var testObj = new _collection([ model1, model2]);

三:对集合的操作

1:at()     通过索引获取集合中某个模型

  var model = testObj.at(2); //{name:‘003‘,gender:‘women‘,age:‘28‘}  

  model.get(‘name‘);   //003

在集合内部,模型被存储在一个名为models的数组中,他的第一个元素索引下标为0

2:indexOf()    获取模型的索引值        该方法从Underscore.js中继承过来

如上面的model,     testObj.indexOf(model);    //2

3:clone()     获取一个模型对象的深拷贝。

(深拷贝:用clone方法,这样克隆的模型对象与实际在集合中存储的对象不是同一个对象,对其中一个值改变不影响其他对象)

 (浅拷贝:用at()索引值获取的模型对象与集合中的对象是同一个对象,相互操作会有影响)

  如: another = testObj.at(2).clone();    another.set(‘name‘:‘test‘);

    another.get(‘name‘); //test        testObj.at(2).get(‘name‘);   //002

3:length()  获取集合长度            len = testObj.length        //3                     model = testObj.at(len-1)

4:add()      添加新模型到集合末端

  testObj.add({name:‘004‘,age:‘30‘,denger:‘women‘})  加一个模型,

  testObj.add([{name:‘005‘,age:‘30‘,denger:‘women‘},{name:‘006‘,age:‘30‘,denger:‘women‘}])  加模型数组

也可以加已有的模型对象

注: add方法保证了重复的模型不会被添加到集合,不重复的才会添加到内部数组models中

5:{at:index}   在指定位置上添加模型

  testObj.add({name:‘000‘,age:‘30‘,denger:‘women‘}, {at:0})       此时 testObj.at(0).get(‘name‘) 输出000

6:remove()    移除模型,参数可以为一个单独的值也可以是数组,可传入模型的id,cid,或者模型对象

如  testObj.remove(model)        testObj.remove([c1,c2])

调用remove时, 会从models中删除模型,并且模型与集合间的引用关系都会删除

7:reset()     删除/清空集合中的所有模型,并添加新模型

  如:testObj.reset([{name:‘A‘,age:3,gender:‘boy‘},{name:‘B‘,age:2,:gender:‘gril‘}]);

8:以栈和队列方式使用集合 push pop unshift shift

  testObj.push(model)

9:排序     comparator回调函数接受一个模型对象作为其唯一的参数,返回要排序的属性。

  a:  testObj.comparator = function(testModel){ return testModel.get(‘age‘);}  //集合会根据age来排序

  b:  testObj.sort();   //调用sort手动出发排序

当调用comparator回调函数后,只要后续有插入的新模型,该回调都会被调用,将新模型插入到适合的位置。

10:where()  对集合中的模型进行过滤,可以传入一个或多个搜索条件

  如: var result= testObj.where({name:‘A‘});        此时result仅是内部模型数组models的一数组,要使用它还得new一个对象数组

    var resultcollection = new _collection(result)   //{name:‘A‘,age:3,gender:‘boy‘}

11:遍历集合 each()

  str = ‘‘;

  testObj.each(function(model,index,list){

    str += model.get(‘name‘);}               //AB

参数: model :当前模型; index:当前模型在集合中的下标;  list:整个模型数组

12:every()  检测满足所有条件

  person = testObj.every(function(model){ return model.get(‘age‘)>18;})  //false  有一个不满足条件就返回false

13: some() 有一个满足条件就返回true

14: pluck()  返回集合中某个属性值的数组 如:testObj.pluck(‘name‘)  //[‘A‘, ‘B‘]

15:map()  对各模型属性值进行计算,返回数组  testObj.map(function(model){return model.get(‘name‘)+‘ ‘+model.get(‘gender‘)})  // [‘A boy‘, ‘B gril‘]

16:reduce()      把个模型归并成一个单一的值  testObj.reduce(function(memo,model){return memo+model.get(‘age‘)},0)    //5

17:chain()  链式操作,可以通过它在调用一个方法完毕后再其结果上通过‘.’来调用另一个方法。

如  假设collection的models为[{num:22,count:10,name:‘aa‘},{num:1,count:2,name:‘test‘}]

   testObj.chain().map(function(model){

    return model.get(‘num‘)+model.get(‘count‘);   //[‘32‘, ‘3‘]

   }).reduce(function(memo,val){

    return memo + val;}).value();     //35

  

backbonejs中的集合篇(一)

时间: 2024-12-14 18:57:46

backbonejs中的集合篇(一)的相关文章

backbonejs中的模型篇(三)

一:在模型中使用嵌套属性 Backbone的扩展插件 Backbone-Nested下载并添加引用 1:定义一个新的模型对象,使用Backbone.NestedModel作为其基类对象 var _model = Backbone.NestedModel.extend({...})                    var testObj = new _model() 2: 使用'.'操作符来获取或设置嵌套属性值 testObj.set({ 'name.title': 'Mr.', 'name

backbonejs中的模型篇(一)

一:模型及属性 模型是MVC应用的基石,它负责存放应用所需的数据,对数据的验证,执行访问控制,以及实现应用所需的特定业务逻辑. backbone通过扩展Backbone.Model对象来定义一个模型. 如:var Mymodel = Backbone.Model.extend({...}); 我们并不需要在模型内部定义一个数据结构,backbone支持在模型初始化时动态定义. 如: mymodeltest = new Mymodel({ date:'2014-08-14', name:'joan

黑马程序员——集合篇

------- android培训.java培训.期待与您交流! ---------- 1.集合类 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一 种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 集合类的特点 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象. 2.集合框架的构成及分类 3.

JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的文章,大多都是以罗列记忆点的形式书写的,没有谈论实现细节和逻辑原理.作为个人笔记无可厚非,但是并不利于他人学习.希望能通过这种比较“费劲”的讲解,帮助我自己.也帮助读者们更好地学习Java.掌握Java. 无论你跟我一样需要应聘,还是说在校学生学习Java基础,都对入门和进一步启发学习有所帮助.(关

JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和ArrayList.HashSet.LinkedList等等.根据核心框架图,相信我们都已经对Collection这个JavaSE中最常用API之一有一个较为全面的认识. 这个学习过程,还可以推及到其他常用开源框架和公司项目的学习和熟悉上面.借助开发工具或说明文档,先是对项目整体有一个宏观的认识,再根

部署SCCM 2012R2之七:安装客户端代理&创建集合篇

由于前段时间公司事情较多,博客也好久未更新,今天就按照之前所讲的内容继续前进,在微软的产品中许多客户端都需要代理的支持,才能完成某些工作任务,如SCVMM.SCCM.SCOM都是如此,在SCCM中不管是软件分发.软件资产.硬件资产,远程控制等都需要安装SCCM的代理. 而创建集合主要是便于管理员根据某些集合而做相应的策略部署,集合主要有用户集合和设备集合.在用户集合中可以创建以OU(如IT.Sales.HR)等为单位的集合,也可以创建以区域(如上海.北京.广州)等为单位的集合,设备集合可以创建不

.net中数据集合导出为Excel(支持泛型及显示字段顺序,可自定义显示列名)

摘要:咳咳~入园快两年,工作也快将近两年了,这才打算写自己在园中的第一篇文章,主要因为之前只是小白一个,肚子里没有什么墨水,现如今,也喝了些许墨水~当然墨水来源也是受益于广大程序猿们的技术分享,感谢,共同进步! 好了,废话不多说,直接切入今天要分享的主题. 主题:.net中数据集合导出为Excel 背景:如今越来越多的公司开始注重了大数据,公司开始通过数据来分析用户的行为习惯或者某些产品给公司带来的利害,总之这些数据都可以很好的帮助公司做的更好,了解自身的优缺点从而更好的为用户服务获取更大的利益

Java中的集合框架-Map

前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从本篇开始,对集合框架里的另外一部分Map作一下记录. 一,集合框架的Map接口 Map与Collection不同之处在于它是以键值对来存储数据: Map比较常用的实现类有四个:HashTable,HashMap,LinkedHashMap,TreeMap: Map的方法也可以分为四类,增删改查,大致如下: 新

【JVM虚拟机】(7)---深入理解Class中-属性集合

#[JVM虚拟机](7)---深入理解Class中-属性集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机](6)---深入理解Class中访问标志.类索引.父类索引.接口索引 那么这篇博客主要讲有关 字段表集合 相关的理解和代码示例. 字段表:用于描述接口或者类中声明的变量,字段包括类级(static修饰)变量以及实例级变量,但是不包括局部变量(方法内部变量). 一.概念 字段表集合:包括了字段计数器和字段数据