认识Backbone (三)

   Backbone.Collection(集合)php

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

  建立集合android

//自定义集合对象
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() )
})

   操做集合ios

   移除集合中的模型算法

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

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

   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" 事件。app

   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'));
相关文章
相关标签/搜索