首页 > Web开发 > 详细

[Backbone.js]如何处理Model里面嵌入的Collection?

时间:2014-02-28 23:59:14      阅读:627      评论:0      收藏:0      [点我收藏+]

写了近半个月的backbone.js代码,从一开始的todo到现在做仿微信的网页聊天,其中最大的困惑就在于如何处理比较复杂的Model,其内嵌了一个或者多个Collections。

假设我们有一个Person的Model,一个Person会有多个工作,那么我们将jobs这个属性设置为一个Collection:

初始化代码如下:

bubuko.com,布布扣
var Job = Backbone.Model.extend({

});

var Jobs = Backbone.Collection.extend({
    model:Job,
});

var Person = Backbone.Model.extend({
    
});
bubuko.com,布布扣

下一步,给Person设置jobs的属性:

bubuko.com,布布扣
var Person = Backbone.Model.extend({
    initialize:function(options){
        this.set(‘jobs‘,options.jobs);
    }
});
bubuko.com,布布扣

然后创建jobs的collection以及person object,将jobs赋值给person.jobs属性:

bubuko.com,布布扣
var jobs = new Jobs([{name:‘PHP工程师‘},{name:‘设计师‘},{name:‘测试人员‘}]);
var jimmy = new Person({jobs:jobs});
bubuko.com,布布扣

通过chrome的console看到值:

bubuko.com,布布扣

 

我们添加一些view,因为在backbone.js里view才是MVC里的Controller:

bubuko.com,布布扣
var PersonView = Backbone.View.extend({
    tagName:‘ul‘,

    initialize:function(){
        this.render();

        this.model.get(‘jobs‘).on(‘add‘,this.addFirst,this);
    },

    addFirst:function(job){
        var jobView = new JobView({model:job});
        this.$el.prepend(jobView.render().el);
    },

    renderOne:function(job){
        var jobView = new JobView({model:job});
        this.$el.append(jobView.render().el);
    },

    render:function(){
        var jobs = this.model.get(‘jobs‘);

        jobs.each(function(job){
            this.renderOne(job);
        },this);

        $(document.body).append(this.el);
    }
});

var JobView = Backbone.View.extend({
    tagName:‘li‘,

    template:‘<%=name%>‘,

    initialize:function(){
        this.model.on(‘change‘,this.render,this);
    },

    render:function(){
        var template = _.template(this.template,this.model.toJSON());
        this.$el.html(template);
        return this;
    },
});
bubuko.com,布布扣

这里要为Job单独设置一个view是因为一个model对应一个view的‘BB原则‘,方便在model改变的时候,view改变。

最后new PersonView:

bubuko.com,布布扣
var jimmyView = new PersonView({model:jimmy});
bubuko.com,布布扣

 

bubuko.com,布布扣

bubuko.com,布布扣

欢迎讨论^^

[Backbone.js]如何处理Model里面嵌入的Collection?,布布扣,bubuko.com

[Backbone.js]如何处理Model里面嵌入的Collection?

原文:http://www.cnblogs.com/qgymje/p/3572939.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!