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. Android中特殊图形的生成样例

    import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; impor ...

  2. A Game of Thrones(17) - Bran

    It seemed as though he had been falling for years. Fly, a voice whispered in the darkness, but Bran ...

  3. 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET

    基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...

  4. [Linux]Centos git报错fatal: HTTP request failed

    在使用git pull.git push.git clone会报类似例如以下的错误: error: The requested URL returned error: 401 Unauthorized ...

  5. mysql增量ID 启动值更改方法

    在mysql很多朋友感到场AUTO_INCREMENT增量型ID值它不能被改变,其实这种认识是错误的,这里mysql增量ID开始值更改和设置. 设置自动递增字段的通常的方法: 格时加入: create ...

  6. 静态网页VS动态网页

    干<沙朗新闻发布系统>什么时候.我们已经建立的网页.html的,并且.aspx,第一次接触.我认为这些东西是一样的,因为它,在观看ASP.NET视频的时候.听见里面讲课的老师有提到了这两样 ...

  7. RequireJS和JQuery的模块化编程

    基于RequireJS和JQuery的模块化编程 由于js的代码逻辑越来越重,一个js文件可能会有上千行,十分不利于开发与维护.最近正在把逻辑很重的js拆分成模块,在一顿纠结是使用requirejs还 ...

  8. web框架之Spring-MVC环境搭建(转)

    spring框架jar包 1.下载spring源包spring地址:http://www.springsource.org/download我下的是spring-framework-3.1.0.REL ...

  9. LAMP配置参考地址

    http://www.linuxidc.com/Linux/2014-07/104563.htm

  10. SQLserver2012 tcp/ip 1433port问题解决方法

    非常多MSSQL安装完毕后,调用1433(默认port)是失败的,这边具体介绍下解决方法. 一..我们须要在电脑上开启telnet服务,定位问题须要.在cmd下使用telnet,假设报命令不存在说明没 ...