Backbone.js 1.0.0源码架构分析(一)

Backbone.js 是javascript 语言中 首个实现MVC设计模式的类库,API接口方法重度依赖于underscore.js,DOM选择器则依赖于jQuery.js或者zepto.js。javascript

Backbone.js 1.0.0 如今既能够支持浏览器端js代码,也能够支持服务端nodejs环境代码。为了实现这个兼容性,Backbone.js 采用了在函数表达式中传进‘this’关键词来映射宿主环境的全局变量(在browser为 ‘window’对象,在nodejs环境为'exports'):java

(function(){

  // 初始设定
  // -------------

  // 保存全局对象在本地的引用
  var root = this;

  // 若是咱们在引入backbone.js以前,全局对象已经存在Backbone属性,则先把它引入到本地变量,以便Backbone.noConfllict()的实现解决命名空间冲突
  var previousBackbone = root.Backbone;

  //建立数组方法在本地的引用,以便于后面利用
  var array = [];
  var push = array.push;
  var slice = array.slice;
  var splice = array.splice;

  // 顶级命名空间的声明,后面模块与方法都将追加到此命名空间之下
  if (typeof exports !== 'undefined') {
//nodejs环境中声明 Backbone = exports; } else {
//browser中声明,而且添加到全局对象中 Backbone = root.Backbone = {}; } // 版本声明 Backbone.VERSION = '1.0.0'; // browser端,保存backbone.js所依赖的 underscore.js 声明的 全局变量 var _ = root._;
// nodejs中,经过require方式引入underscore.js if (!_ && (typeof require !== 'undefined')) _ = require('underscore'); // 保存Jquery或Zepto等DOM选择器、操做类库所声明的全局变量在本地的引用 Backbone.$ = root.jQuery || root.Zepto || root.ender || root.$; // 进入非冲突模式,即Backbone的变量已经存在,咱们就退而避之,将backbone.js换作其余变量名 Backbone.noConflict = function() { root.Backbone = previousBackbone; return this; };
// backbone各APT方法的实现
}).call(this);

  一个js框架或者类库在编写的时候,首先要为本身‘正名’,如此,才可以扬名立万。node

     既然名已正,其内功招式就能够正常地表现了。设计模式

     Backbone 既然有 MVC 之名,那咱们就来先看看MVC的典型架构吧:数组

而backbone.js 能够这样实现浏览器

 一、自定义model与collection架构

 二、定义渲染model的视图view框架

 三、定义渲染collection的视图view函数

 四、引入视图渲染模板 ui

相关文章
相关标签/搜索