JavaScript学习笔记前端

Backbone入门之集合(Backbone.Collectio

2016-05-01  本文已影响957人  惊鸿三世

我的个人博客

上一篇,我们讲述了Backbone模型的入门学习,本篇开始学习Backbone集合。

Backbone集合是模型的有序组合,通过拓展Backbone.Collection对象来创建集合:


    var app = app || {};
    app.MenuModel = Backbone.Model.extend({
        defaults: {
            title: 'this is a menu',
            name: '最近联系人',
            status: 'active'
        },
        idAttribute: 'idx'
    });
    app.MenuCollection = Backbone.Collection.extend({
        model: app.MenuModel
    });
    app.menu = new app.MenuModel({
        status: 'inactive',
        idx: '001'
    });
    app.menus = new app.MenuCollection([app.menu]);
    console.log(app.menus.length); //1

在创建集合时,通过model属性设置集合中的模型类型,实例化集合时,可以传入对象或数组,它们将被自动转换为通过model设置的模型类型。

初始化

在创建集合时,可以设置initialize函数,在实例化集合时,将自动调用执行initialize函数:


    app.MenuCollection = Backbone.Collection.extend({
        model: app.MenuModel,
        initialize: function() {
            console.log('集合初始化成功');
        }
    });
    app.menus = new app.MenuCollection([app.menu]);

打印值如下:

初始化打印值

集合属性方法

集合与模型

Backbone.Collection对象允许我们通过多种方法对模型进行管理。

添加/移除模型

集合创建以后,可以使用add()和remove()方法添加或移除集合中的模型:


    app.MenuModel = Backbone.Model.extend({
           defaults: {
               title: 'this is a menu',
               status: 'inactive'
           }
       });
    app.MenuCollection = Backbone.Collection.extend({
        model: app.MenuModel,
        initialize: function() {
            console.log('集合初始化成功');
        }
    });
    var menu1 = new app.MenuModel({
        name: '最近会话',
        status: 'active'
    });
    var menu2 = new app.MenuModel({
        name: '通讯录',
        status: 'inactive'
    });
    var menu3 = new app..MenuModel({
        name: '公告',
        status: 'inactive'
    });
    app.menus = new app.MenuCollection([menu1, menu2]);
    console.log(app.menus);

app.menus打印值如下:

app.menus集合

    app.menus.add(menu3);
    console.log(app.menus.length);//3
    app.menus.remove(menu2);
    console.log(app.menus.length);//2

检索模型

重置刷新集合

事件监听

集合是模型的有序组合,在集合中添加或移除模型时会触发add或remove事件,我们可以监听这些事件,进行相应数据逻辑处理;同时,可以在集合的任意模型属性上绑定change事件,监听模型属性的变化。

一般,事件监听在集合初始化时绑定,第一个参数为监听事件类型,第二个参数为监听回调,第三个参数为回调的上下文环境(可选),通常传入指向当前集合的this。


    app.MenuModel = Backbone.Model.extend({
           defaults: {
               title: 'this is a menu',
               status: 'inactive'
           }
    });
    app.MenuCollection = Backbone.Collection.extend({
        model: app.MenuModel,
        initialize: function() {
            console.log('集合初始化成功');
            this.on('reset', function(cols, options) {
                console.log('重置集合');
            }, this);
            this.on('add', function(model) {
                console.log('添加模型,cid: ' + model.cid);
            }, this);
             this.on('change', function(model) {
                console.log('模型属性改变为: ' + model.get(name'));
            });
            this.on('change:name', function(model) {
                console.log('模型name属性改变为: ' + model.get('name'));
            });
            this.on('remove', function(model) {
                console.log('移除模型: ' + model.cid);
            });
        }
    });
    var menus = [
        {
            id: 1,
            name: '最近会话',
            status: 'active'
        },
        {
            id: 2,
            name: '通讯录',
            status: 'inactive'
        }
    ]
    app.menus = new app.MenuCollection(menus);
    app.menus.set([
        {id:1, name: '最近聊天'},
        {id:3, name: '公告'}
    ]);
    app.menus.reset([
        {id:1, name: '最近聊天'}
    ]);
    
    //logs:
    //模型name属性改变为: 最近聊天 
    //模型属性改变为: 最近聊天
    //移除模型: c3 
    //添加模型,cid: c4 
    //重置集合 

Backbone事件除了上文的on()方法,还可以使用once()方法,与jQuery的once类似,监听回调只执行一次。

关于Backbone.Collection集合的主要基础内容就阐述到这里,下一篇继续学习Backbone的视图(Backbone.View)。

上一篇 下一篇

猜你喜欢

热点阅读