Backbone.Collection(集合)

   collection是model对象的一个有序的组合,我们可以在集合上绑定 "change" 事件,从而当集合中的模型发生变化时fetch(获得)通知,集合也可以监听 "add" 和 "remove" 事件, 从服务器更新,并能使用 Underscore.js 提供的方法。

  创建集合

//自定义集合对象
var Book = Backbone.Model.extend({
defaults:{
title: 'backbone',
author: 'Jeremy Ashkenas'
}
})
var Books = Backbone.Collection.extend({
model: Book
})
var booklist = [
{title:'ios',author:'apple'},
{title:'android',author:'google'},
{title:'Windows Phone',author:'microsoft'}
]
//自定义
var books = new Books(booklist)
//遍历集合中的模型
books.each(function(book){
console.log( book.toJSON() )
//console.log(book.get('title') +' / '+ book.get('author'))
}) //实例化集合对象
var Book = Backbone.Model.extend({
defaults:{
title: 'backbone',
author: 'Jeremy Ashkenas'
}
})
var booklist = [
{title:'ios',author:'apple'},
{title:'android',author:'google'},
{title:'Windows Phone',author:'microsoft'}
]
//实例化
var books = new Backbone.Collection(booklist,{
model: Book
})
//遍历集合中的模型
books.each(function(book){
console.log( book.toJSON() )
})

  操作集合

  移除集合中的模型

   remove collection.remove(models, [options]) 从集合中删除一个模型(或一个模型数组),并且返回他们。会触发 "remove" 事件,同样可以使用 silent 关闭。移除前该模型的index可用作options.index类监听。

   pop collection.pop([options]) 删除并且返回集合中最后一个模型。

   shift collection.shift([options]) 删除并且返回集合中第一个模型。

var Book = Backbone.Model.extend({
defaults:{
title: 'backbone',
author: 'Jeremy Ashkenas'
}
})
var booklist = [
{title:'ios',author:'apple'},
{title:'android',author:'google'},
{title:'Windows Phone',author:'microsoft'}
]
var books = new Backbone.Collection(booklist,{
model: Book
}) books.shift() //删除第1个模型
//books.remove(books.models[0])
books.pop() //删除徐最后1个模型 books.each(function(book){
console.log( book.toJSON() )
})

  添加模型到集合中

  add collection.add(models, [options]) 向集合中增加一个模型(或一个模型数组),触发"add"事件。  如果已经定义了model属性, 您也可以通过原始属性的对象让其看起来像一个模型实例。 返回已经添加的(或预先存在的,如果重复)模式。  传递{at: index}可以将模型插入集合中特定的index索引位置。 如果您要添加 集合中已经存在的模型 到集合,他们会被忽略, 除非你传递{merge: true}, 在这种情况下,它们的属性将被合并到相应的模型中, 触发任何适当的"change" 事件。

   push collection.push(model, [options]) 在集合尾部添加一个模型。

   unshift collection.unshift(model, [options]) 在集合头部添加一个模型。

var Book = Backbone.Model.extend({
defaults:{
title: 'backbone',
author: 'Jeremy Ashkenas'
}
})
var booklist = [
{title:'ios',author:'apple'},
{title:'android',author:'google'},
{title:'Windows Phone',author:'microsoft'}
]
var books = new Backbone.Collection(booklist,{
model: Book
}) books.add({title: 'Java', author: 'xxx'}) //添加1个模型 默认尾部
books.push({title: 'C++', author: 'ccc'}) //添加1个模型到尾部
books.unshift({title: 'PHP', author: 'ppp'}) //添加1个模型到头部 books.each(function(book){
console.log( book.toJSON() )
})

  查找集合中的模型

  get collection.get(id) 通过一个id,一个cid,或者传递一个model来 获得集合中 的模型。

   at collection.at(index) 获得集合中指定索引的模型。不论你是否对模型进行了重新排序, at 始终返回其在集合中插入时的索引值。

   where collection.where(attributes) 返回集合中所有匹配所传递 attributes(属性)的模型数组。 对于简单的filter(过滤)比较有用。

   findWhere collection.findWhere(attributes) 就像where, 不同的是findWhere直接返回匹配所传递 attributes(属性)的第一个模型。

var Book = Backbone.Model.extend({
defaults:{
code: 0,
title: 'backbone',
author: 'Jeremy Ashkenas'
},
idAttribute: 'code'
})
var booklist = [
{code:1,title:'ios',author:'apple'},
{code:2,title:'android',author:'google'},
{code:3,title:'Windows Phone',author:'microsoft'}
]
var books = new Backbone.Collection(booklist,{
model: Book
}) //books.at(2) console.log( books.get(1).toJSON() ) //Object {code: 1, title: "ios", author: "apple"}
console.log( books.at(1).toJSON() ) //Object {code: 2, title: "android", author: "google"}
_.each( books.where({title:'Windows Phone'}),function(book){
console.log( book.toJSON() )
}) //Object {code: 3, title: "Windows Phone", author: "microsoft"}
console.log( books.findWhere({title:'Windows Phone'}).toJSON() ) //Object {code: 3, title: "Windows Phone", author: "microsoft"}

  集合中模型排序

  sort collection.sort([options]) 强制对集合进行重排序。一般情况下不需要调用本函数,因为当一个模型被添加时,comparator 函数会实时排序。要禁用添加模型时的排序,可以传递{sort: false}add。 调用sort会触发的集合的"sort"事件。

   comparator collection.comparator 默认情况下,集合没有声明 comparator 函数。如果定义了该函数,集合中的模型会按照指定的算法进行排序。

var Book = Backbone.Model.extend({
defaults:{
code: 0,
title: 'backbone',
author: 'Jeremy Ashkenas'
}
})
var booklist = [
{code:7,title:'ios',author:'apple'},
{code:5,title:'android',author:'google'},
{code:6,title:'Windows Phone',author:'microsoft'}
]
var books = new Backbone.Collection(booklist,{
model: Book,
comparator: function(a,b){
return a.get('code') > b.get('code') ? 1 : 0; //升序
//return a.get('code') > b.get('code') ? 0 : 1; //降序
}
})
books.sort()
books.each(function(book){
console.log( book.toJSON() )
})
// Object {code: 5, title: "android", author: "google"}
// Object {code: 6, title: "Windows Phone", author: "microsoft"}
// Object {code: 7, title: "ios", author: "apple"}

  与服务器交互   

  获取服务器数据

  fetch collection.fetch([options]) 从服务器拉取集合的默认模型设置 ,成功接收数据后会setting(设置)集合。

var Book = Backbone.Model.extend({
defaults:{
code: 0,
title: 'backbone',
author: 'Jeremy Ashkenas'
}
})
var Books = Backbone.Collection.extend({
url: 'backbone-test.php',
model: Book,
initialize: function(){
//reset事件触发
this.on('reset',function(render){
_.each(render.models,function(book){
console.log( book.toJSON() )
})
})
}
})
var books = new Books()
books.fetch({
reset: true,
success: function(collection, response){
_.each(collection.models,function(book){
console.log( book.toJSON() )
})
}
}) //php文件
$json = array(
array('code'=> 1,'title'=> 'ios','author'=>'apple'),
array('code'=> 2,'title'=> 'android','author'=>'android'),
array('code'=> 3,'title'=> 'windows phone','author'=>'microsoft')
);
echo json_encode($json);

  同步服务器数据

  create collection.create(attributes, [options]) 方便的在集合中创建一个模型的新实例。 相当于使用属性哈希(键值对象)实例化一个模型, 然后将该模型保存到服务器, 创建成功后将模型添加到集合中, 返回这个新模型。

var Book = Backbone.Model.extend({
defaults:{
code: 0,
title: 'backbone',
author: 'Jeremy Ashkenas'
}
})
var Books = Backbone.Collection.extend({
url: 'backbone-test.php',
model: Book,
initialize: function(){
this.on('add',function(model,response){
console.log( model.toJSON() ) //Object {title: "ios", author: "apple", code: 0}
})
}
})
var books = new Books()
books.create({title: "ios", author: "apple"}) //php文件 //设置接收数据的格式
header('Content-Type: application/json; charset=utf-8');
//获取客户端发送来的数据
$data = json_decode(file_get_contents("php://input"));
/* 获取各个属性值,保存至服务器中 */
//返回更新成功的标志
echo json_encode(array('code'=>'2'));

认识Backbone (三)的更多相关文章

  1. RequireJS与Backbone简单整合

    前言 昨天我们一起学习了Backbone,最后做了一个备忘录的例子,说是做了不如说是看了下官方提供的例子,所以最终我感觉我们还是没能掌握Backbone,今天还得做个其它例子先. 然后前面也只是草草学 ...

  2. Backbone事件机制核心源码(仅包含Events、Model模块)

    一.应用场景 为了改善酷版139邮箱的代码结构,引入backbone的事件机制,按照MVC的分层思想搭建酷版云邮局的代码框架.力求在保持酷版轻量级的基础上提高代码的可维护性.   二.遗留问题 1.b ...

  3. Yeoman 学习笔记

    yoeman 简介:http://www.infoq.com/cn/news/2012/09/yeoman yeoman 官网: http://yeoman.io/ yeoman 是快速创建骨架应用程 ...

  4. Javascript 的模块化编程及加载模块【转载+整理】

    http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 本文内容 引入 模块化 最初写法 对象写法 立即执行函数写法 放大模式 宽放 ...

  5. Backbone源码分析(三)

    Backbone源码分析(一) Backbone源码分析(二) Backbone中主要的业务逻辑位于Model和Collection,上一篇介绍了Backbone中的Model,这篇文章中将主要探讨C ...

  6. 【 js 基础 】【 源码学习 】backbone 源码阅读(三)浅谈 REST 和 CRUD

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

  7. 【 js 基础 】【 源码学习 】backbone 源码阅读(三)

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

  8. 用Backbone.js创建一个联系人管理系统(三)

    原文: Build a Contacts Manager Using Backbone.js: Part 3 欢迎回到这系列的教程,关注使用Backbone.js构建应用程序. 如果你还没看过第一,二 ...

  9. Backbone源码解析(三):Collection模块

    Collection模块式是对分散在项目中model的收集,他可以存储所有的model,构成一个集合,并且通过自身的方法统一操作model.Collection模块包装着若干对象,对象本身不具有一些方 ...

随机推荐

  1. OCP读书笔记(16) - 管理资源

    使用者组 创建资源用户组OLTP_GRP,将用户HR,OE加入此组: BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_m ...

  2. brutal是什么意思_brutal在线翻译_英语_读音_用法_例句_海词词典

    brutal是什么意思_brutal在线翻译_英语_读音_用法_例句_海词词典 brutal

  3. plsql导入一个目录下全部excel

    import java.io.File; import java.util.ArrayList; import jxl.Sheet; import jxl.Workbook; import com.j ...

  4. 拿到阿里,网易游戏,腾讯,smartx的offer的过程 (转)

    前言 从今年的3月14日阿里的电话面试开始,到现在4月16日在西安悦豪酒店进行的腾讯HR面到现在一个多月了,中间先后收到了阿里,网易游戏,腾讯和smartx的offer,今天早晨刚刚接到了腾讯HR的电 ...

  5. hdu1565+hdu1569(最大点权独立集)

    传送门:hdu1565 方格取数(1) 传送门:hdu1569 方格取数(2) 定理:1. 最小点权覆盖集=最小割=最大流2. 最大点权独立集=总权-最小点权覆盖集 步骤: 1. 先染色,取一个点染白 ...

  6. Ajaxterm-0.10-8.el5.noarch.rpm CentOS 5 (RHEL 5) Download

    Ajaxterm-0.10-8.el5.noarch.rpm CentOS 5 (RHEL 5) Download Install Howto Download the latest epel-rel ...

  7. 【Gapps】安装GooglePlay引发一系列问题

    再次感谢小海的支持,感谢大家的支持! 从安装CM至如今GooglePlay,小海为我提供了非常多方案,能够说是全面支持.仅仅是出于隐私不便公开他的个人信息,仅提供一个他的博客地址http://luha ...

  8. 【转】Vim学习资料

    初学资料:1:一个介绍VIM操作的游戏,十分适合初学者.只是:不要怕英文.vim-adventures.com2:http://blog.csdn.net/niushuai666/article/de ...

  9. Mac下配置Cocos2d-x3.1环境

    一.前期准备 1.ADT:百度下就OK 2.NDK:百度下就OK 3.ANT: http://124.254.47.39/download/55152992/78533365/4/zip/57/132 ...

  10. Java多线程使用场景

    使用多线程就一定效率高吗? 有时候使用多线程并不是为了提高效率,而是使得CPU能够同时处理多个事件. 使用场景1 为什么了不阻塞主线程,启动其他线程来做耗时的事情. 比如app开发中耗时的操作都不在U ...