[Backbone.js]如何处理Model里面嵌入的Collection?
写了近半个月的backbone.js代码,从一开始的todo到现在做仿微信的网页聊天,其中最大的困惑就在于如何处理比较复杂的Model,其内嵌了一个或者多个Collections。
假设我们有一个Person的Model,一个Person会有多个工作,那么我们将jobs这个属性设置为一个Collection:
初始化代码如下:
var Job = Backbone.Model.extend({
});
var Jobs = Backbone.Collection.extend({
    model:Job,
});
var Person = Backbone.Model.extend({
});
下一步,给Person设置jobs的属性:
var Person = Backbone.Model.extend({
    initialize:function(options){
        this.set('jobs',options.jobs);
    }
});
然后创建jobs的collection以及person object,将jobs赋值给person.jobs属性:
var jobs = new Jobs([{name:'PHP工程师'},{name:'设计师'},{name:'测试人员'}]);
var jimmy = new Person({jobs:jobs});
通过chrome的console看到值:

我们添加一些view,因为在backbone.js里view才是MVC里的Controller:
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;
    },
});
这里要为Job单独设置一个view是因为一个model对应一个view的'BB原则',方便在model改变的时候,view改变。
最后new PersonView:
var jimmyView = new PersonView({model:jimmy});


欢迎讨论^^
[Backbone.js]如何处理Model里面嵌入的Collection?的更多相关文章
- Backbone.js之model篇(一)
		
Backbone.js之model篇(一) Backbone 是一个前端 JS 代码 MVC 框架,它不可取代 Jquery,不可取代现有的 template 库.而是和这些结合起来构建复杂的 web ...
 - backBone.js之Model篇 (1) 简单实例
		
“Model是js应用的核心,包括基础的数据以及围绕着这些数据的逻辑:数据转换.验证.属性计算和访问控制”. 一.初始化方法 我们先来看一个demo,initialize,这是一个初始化方法,但是写这 ...
 - backbone.js之Model篇 简单总结和深入(2)
		
一.模型属性的一些操作方法 1.mmodel.get() 获取属性的值 2.mmodel.set('age',5) 更新单个属性的值 mmodel.set({name:'aaa',age:6}) ...
 - backbone.js 教程(1) View & Model & Collection
		
Backbone.js Overview 它由Jeremy Ashkenas开发,最初发行于2010-10-13 它是一个轻量的JavaScript类库,只依赖于underscore.js,非强制依赖 ...
 - Backbone中的model和collection在做save或者create操作时, 如何选择用POST还是PUT方法 ?
		
Model和Collection和后台的WEB server进行数据同步非常方便, 都只需要在实行里面添加一url就可以了,backbone会在model进行save或者collection进行cre ...
 - Backbone.js 中使用 Model
		
前面几篇 Backbone.js 的例子中有使用到 template, 及数据的填充,其实这已经很接近 Model 了.现在来学习怎么创建自己的 Model 类,并简单的使用.Backbone.js ...
 - MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录
		
注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...
 - Backbone.js入门教程
		
原文: Getting Started with Backbone.js 不像其它的Web开发语言,过去Javascript很少可用的架构.令人感到高兴的是,最近几年这种情况得到非常大的改善. 今天我 ...
 - 用Backbone.js创建一个联系人管理系统(一)
		
原文 Build a Contacts Manager Using Backbone.js: Part 1 在这个教程里我们将会使用Backbone.js,Underscore.js,JQuery创建 ...
 
随机推荐
- LogBoy 之Android Studio控制台输出日志太多清空
			
在使用Android studio的时候,有时候会由于手机输出的日志太多,导致控制台瞬间清空,尤其是遇见一些FATAL Exception时候,瞬间控制台就被清空了,根本捕获不到,导致其他调试的日志也 ...
 - 安装eclipse
			
前提,安装好jdk并成功配置好环境变量 下载eclipse-standard-kepler-R-win32-x86_64,直接打开里面的eclipse.exe文件即可
 - 最核心4大NFC技术规范详解
			
1998年,飞利浦.索尼和诺基亚创建了 NFC论坛,宗旨是推动NFC的发展普及和规范化.论坛至今共推出了5大类技术规范:协议技术规范(Protocol Technical Specification) ...
 - Seafile 推出 “分布式文件同步技术” 打造的私有云服务
			
近两年来 Dropbox 等云储存服务迅速窜红,各大巨头纷纷推出自家的云储存服务(苹果的 iCloud, 微软的 SkyDrive, Google 即将推出的 GDrive),国内也有类似的服务(金山 ...
 - 在android画面切换时设置跟随变动的小圆圈
			
首先还是老规律,上传两张效果图: 第一张图: 第二张图: 前言:我们经常在使用各类安卓APP的时候发现会有如图所示的小圆圈显示当前页所在的,甚至一般来说我们的android桌面上也应该有 ...
 - boost的并发库
			
thread: http://www.boost.org/doc/libs/1_61_0/libs/thread/ asio: http://www.boost.org/doc/libs/1_61_0 ...
 - linux大事件集
			
1,RHEL 6.6 Beta为RHEL 6.x用户提供了对远程直接内存访问(RDMA)聚合以太网(RoCE)的支持(IB卡,Mellanox),带来低延迟.高带宽的网络连接; 2,rhel7 201 ...
 - 关于” fatal error C1010: unexpected end of file while looking forprecompiled header directive”问题
			
其中文意思是:致命错误C1010:意想不到的文件结束而寻找预编译头文件的指令错误执行cl exe. 经过多次的查找,终于解决这问题 方法一: 在头文件中加“#include "stdafx. ...
 - Iptabels详解
			
http://www.07net01.com/2016/02/1291283.html Iptabels是与linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的 ...
 - hdu 5621 KK's Point(数学,推理题)
			
题解: 在圆上点三个点时,除圆上三个交点外,圆内没有交点:在圆上点四个点时,除圆上四个交点外,圆内出现了一个交点,因此,在N个点中每四个点便可以在圆内产生一个交点,因此N个点在圆内形成的点的个数为CN ...