终于看到一个只有一千多行的js框架了,于是抱着一定可以看懂他的逻辑的心态,查看了他的整个源码,进去之后才发现看明白怎么用容易,看懂怎么写的就难了,于是乎有了这篇博客的标题:浅介,只能粗浅的介绍下Backbone.js的调用逻辑了。在Backbone.js中共有7个类对象,从网上盗图一发,图上清晰的展现了各个对象的逻辑关系。

  

  首先出场的是Event对象,仔细看看Event只是对JS的事件绑定进行了重新的封装, 所以不用深究。

  看起来高大上的Model对象,Model对象是所有数据对象模型的基类,能够动态的添加一些属性值。Model可以做到当对象方法改动后立即发出响应,这点主要在Model的set方法中来实现,在Model中,所有的数据会保留两个版本,一个上一次修改后的版本,一个是当前版本,如果当前版本和上一次修改的版本不同的时候则触发change函数。Model也实现了到服务器后台的操作,能够事实把数据提交到后台或者从后台提取数据。

  在次是Collection模型,Collection只是个苦工,相当与Vector的数据结构,Colletcion负责维护一系列数据模型的数组,他对数组对象进行了再次封装,为了让他更加专业的干活,Collection还封装了一些可以直接操作模型的方法。

  其次是Router类的实现。使用Asp.net 的MVC的人知道,router是连接服务器和网页的映射模块,从客户端发来的请求会经过Router来获得应该去调用哪个后台处理函数。在Backbone.js中Router也有类似的功能,在单页面应用程序中你可能需要给程序的URL传参数来重新刷新页面,比如说一个可以翻页的表格,合理的想法是,当你点击下一页时再重新从数据库中获取数据,呈现到页面上,而不是一次性的将所有数据读取进来。这样就需要通过给URL传参数来达到这样的效果了,这就是Router的功能,Router将根据URL中的参数调用相应的函数来更新页面。

  History类提供了对Router管理的操作,包括监听URL的变化,当发生事件时就会首先从History将事件匹配到Router中,然后从Router进行调用事件处理。

  View类, View类用于连接界面元素与model,当model发生改变的时候通过视图中绑定的change事件,当数据发生变化时重新渲染元素。

  Sync类:sync类用于在向服务器发送同步数据请求。

  综上所述,我们大致可以看出了Backbone.js各个之间联系的脉络。Model, View是一个组合,当我们触发一定的动作调用相应的事件函数,这个事件函数会修改Model中的数据成员,数据被修改后,程序会自动连接后台,并且响应到界面上。Router和History是另一个组合,当我们修改了URL后,程序在前台向后台索取数据,并更新我们的界面。

BackBone.js是一个MVC架构吗?

以我目前的理解来看,Backbone并不算是一个三层架构,而是一个两层架构, Model和View分别承担了Controller的部分功能,不过宏观上看来View更像是Controller,而真实的View则是我们的网页吧。

参考链接:

http://documentcloud.github.io/backbone/#Router

http://www.cnblogs.com/xuwenmin888/archive/2013/05/27/3101445.html

Backbone.js源码浅介的更多相关文章

  1. Backbone.js源码分析(珍藏版)

    源码分析珍藏,方便下次阅读! // Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone ...

  2. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  3. MVVM大比拼之avalon.js源码精析

    简介 avalon是国内 司徒正美 写的MVVM框架,相比同类框架它的特点是: 使用 observe 模式,性能高. 将原始对象用object.defineProperty重写,不需要用户像用knoc ...

  4. 深入理解unslider.js源码

    最近用到了一个挺好用的幻灯片插件,叫做unslider.js,就想看看怎么实现幻灯片功能,就看看源码,顺便自己也学习学习.看完之后收获很多,这里和大家分享一下. unslider.js 源码和使用教程 ...

  5. Jquery.cookie.js 源码和使用方法

    jquery.cookie.js源码和使用方法 jQuery操作cookie的插件,大概的使用方法如下 $.cookie(‘the_cookie’); //读取Cookie值$.cookie(’the ...

  6. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

    返回目录 说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都 ...

  7. basket.js 源码分析

    basket.js 源码分析 一.前言 basket.js 可以用来加载js脚本并且保存到 LocalStorage 上,使我们可以更加精准地控制缓存,即使是在 http 缓存过期之后也可以使用.因此 ...

  8. underscore.js 源码

    underscore.js 源码 underscore]JavaScript 中如何判断两个元素是否 "相同" Why underscore 最近开始看 underscore.js ...

  9. 国籍控件(js源码)

    国籍控件(js源码) 一直苦于没有好的国籍控件可以用,于是抽空写了一个国籍控件,现分享给大家. 主要功能和界面介绍 国籍控件主要支持中文.英文过滤以及键盘上下事件. 源码介绍 国籍控件核心是两个文件, ...

随机推荐

  1. 在阿里云Windows Server 上部署ASP .NET CORE2.0项目

    近期使用ASP.NET Core2.0对博客进行了重写,在部署到服务器时遇到了一些问题,来记录一下留用. 配置环境 安装 .Net Framework3.5 在IIS管理器上直接开启,这里总是失败,上 ...

  2. Office Web app server 2013 目前无法和windows server 2012 R2兼容。

    另外旧版的office文档和PDF格式不支持预览功能.

  3. Gitkraken的使用

    一个优秀的团队合作离不开git,一个优秀的程序员也离不开git.gitkraken是我在进行软工实践这门课接触到的git的UI界面的工具,它给我留下的印象就是非常好用和方便 怎么个方便法呢? 方便的安 ...

  4. 命令行翻译 推荐一个linux系统中可用的终端小程序

    程序的github地址:https://github.com/fanbrightup/fanyi 使用起来非常简单,同时支持中英文互译甚至是整句. 步骤一:首先你需要安装node,参见我的node安装 ...

  5. NOIP模板总结

    NOIP模板总结 进考场先打一份缺省源: # include <cstdio> # include <iostream> # include <cstring> # ...

  6. AIX平台安装Oracle11gR2数据库

    1. 前提条件 1.1 认证操作系统 Certification Information for Oracle Database on IBM AIX on Power systems(Doc ID ...

  7. Spring之强制修改某个方法的行为(Arbitrary method replacement)

      A less commonly useful form of method injection than Lookup Method Injection is the ability to rep ...

  8. [笔记] ubuntu下添加windows的字体

    方法如下: 第一步:将windows下喜欢的字体文件copy到一个文件夹中,例如将XP里WINDOWS/FONTS中的字体文件(本人比较贪心,把整个文件夹copy了过来……),在linux中命名为xp ...

  9. 批量下载,多文件压缩打包zip下载

    0.写在前面的话 图片批量下载,要求下载时集成为一个压缩包进行下载.从昨天下午折腾到现在,踩坑踩得莫名其妙,还是来唠唠,给自己留个印象的同时,也希望给需要用到这个方法的人带来一些帮助. 1.先叨叨IO ...

  10. 20155308 《网络攻防》 Exp3 免杀原理与实践

    20155308 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测 ...