`

我学Backbone.js (1)- 设置、事件、模型

    博客分类:
  • MVC
 
阅读更多

关注Backbone已经有一年多了,终于有机会在近期的项目中使用其进行重构,接下来记录一些学习笔记和使用心得,希望和大家进行交流,共同提高。

 

 

Backbone的命名空间和冲突管理

 

首先Backbone包含一个会立即执行的函数表达式:

 

 

(function(){

  // Backbone.js

}).call(this);

 

 

接下来,它配置一个叫Backbone命名空间,并通过noConflict模式来解决多个Backbone版本的冲突问题

 

 

var root = this;
var previousBackbone = root.Backbone;

Backbone.noConflict = function() {
  root.Backbone = previousBackbone;
  return this;
};

 

 

 这样在同一个页面中的多个backbone版本就可以象下面这样调用了

 

 

var Backbone19 = Backbone.noConflict();

// Backbone19 refers to the most recently loaded version,
// and `window.Backbone` will be restored to the previously
// loaded version
 

 

同时它还支持CommonJS规范

 

 

var Backbone;

if (typeof exports !== 'undefined') {

  Backbone = exports;

} else {

  Backbone = root.Backbone = {};

}
 

服务器支持

 

Backbone可以通过设置一个变量来表示HTTP服务器的支持:

 

 

Backbone.emulateHTTP = false;

Backbone.emulateJSON = false;
 

Backbone.sync类似jquery ajax,其http参数基于jquery api。jquery ajax可能不能完全满足你的项目需求,那么,用同名方法就可以简单的重写它:

 

 

Backbone.sync = function(method, model, options) {

};
 

对于模型的增、删、改、查,都提供了对应的方法,这里是默认的methodMap:

 

 

var methodMap = {

  'create': 'POST',

  'update': 'PUT',

  'delete': 'DELETE',

  'read':   'GET'

};
 

事件

 

Backbone有一个内置的模块来处理事件,看一个例子:

 

on: function(events, callback, context) , aliased to bind

off: function(events, callback, context) {, aliased to unbind

trigger: function(events) {
 

每个方法都会返回this,推荐使用underscore去为对象添加事件:

 

 

//     var object = {};

//     _.extend(object, Backbone.Events);

//     object.on('expand', function(){ alert('expanded'); });

//     object.trigger('expand');
 

这样你可以很容易将事件添加到项目中的其他对象中去,而不用担心覆盖现有对象。

 

 

模型

 

Backbones模型非常重要,它是一个构造函数,并通过设置各种不同的属性来管理模型。

 

你可以使用undersocre为backbone.events添加方法,模型的公用方法会被自动定义好。

 

需要注意的是,backbone.model是没有任何私有方法的构造函数。

 

set方法可以支持两种不同的类型(单个或多个属性):

 

 

if (_.isObject(key) || key == null) {

  attrs = key;

  options = value;

} else {

  attrs = {};

  attrs[key] = value;

}
 

 

save方法也是类似的,下面,作者为了确保对象被设置了options,这可能比options = options || {}更好:

 

 

options || (options = {});

 

set方法会触发验证,并在验证失败后阻止进一步操作:

 

 

if (!this._validate(attrs, options)) return false;

 

接下来遍历每个属性,通过isEqual 方法验证,如果该属性被改变则记录下。一旦这个更改列表被建立,那么会调用change方法。

 

这个change事件会触发每个change方法,允许更改任何属性;举例说明,假如我有一个blogPost模型:

 

 

blogPost.on('change:title', function() {

  // 更新标题

});

blogPost.set('title', '测试一下');

 

注意,其他的方法也会触发change事件,如:unset,clear和fetch。实际上,他们都是通过set方法执行,并可以支持不同的options:

 

 

clear: function(options) {

  options = _.extend({}, options, {unset: true});

  return this.set(_.clone(this.attributes), options);

},
 

你可以使用fetch方法同步获取服务器端或持久层的数据,这个方法是可以被重写的。

 

sync方法用于将更改保存至服务器,isNew用于该模型的创建和更新,通过id属性来决定其状态,这样如果对持久层采用不同的方式就可以方便的覆盖。

 

须要注意的是,在backbone内部引用this.id不能映射到isNew的idAttribute。

 

总结一下本次学到的

 

  • 通过重写sync方法可以操作任何持久层
  • 事件驱动模型
  • 模型change事件驱动UI变化
  • 模型可知道何时创建或更新对象
  • 使用模型、事件来组织项目架构是有好处的

 

分享到:
评论

相关推荐

    Backbone.js(1.1.2) API中文文档.zip Backbone.js离线文档

    Backbone.js是一款轻量级的JavaScript库,专为构建丰富的Web应用程序而设计。它通过提供模型(Models)、视图(Views)、集合(Collections)和路由器(Routers)等核心概念,帮助开发者组织代码并实现MVC(Model-...

    BACKBONE.JS应用程序开发

    你将学会使用backbone自有风格的模型-视图-控制器(mvc)架构,来创建结构化的javascript应用程序。, 《backbone.js应用程序开发》先从了解mvc、spa和backbone的基本知识开始,然后着手构建示例应用程序——一个简单...

    《Backbone.js实战》(陶国荣)源码

    Backbone.js是一款轻量级的JavaScript库,专为构建复杂的Web应用而设计。它通过提供模型、视图、集合和路由器等概念,帮助开发者更好地组织和管理代码,实现MVC(Model-View-Controller)模式在前端的落地。陶国荣的...

    Backbone.js开发秘笈源码

    它提供了一套模型-视图-控制器(MVC)架构,帮助开发者组织代码,使得前端开发更加有序。在深入探讨Backbone.js的开发秘笈源码之前,我们先理解一下Backbone.js的核心概念。 1. **模型(Model)** 在Backbone.js中...

    Backbone.js的事件绑定

    Backbone.js是一个轻量级的JavaScript库,专为构建可维护和模块化的Web应用而设计。它基于MVC(Model-View-Controller)模式,帮助开发者组织和管理前端代码结构,使得复杂的应用程序更容易理解和扩展。在“Backbone...

    backbone.js入门教程

    Backbone.js 是一款轻量级的 JavaScript 框架,它为 Web 开发提供了 MVC(Model-View-Controller)架构的基础组件。该框架的目标是简化客户端应用的开发流程,通过提供 Models、Collections 和 Views 的抽象层次结构...

    Developing Backbone.js Applications

    Backbone.js是一个轻量级的JavaScript库,它为创建结构化的前端应用提供了模型-视图-控制器(MVC)架构。这个主题旨在帮助开发者深入理解和有效地运用Backbone.js来开发复杂而有组织的Web应用。 **Backbone.js核心...

    Backbone.js应用程序开发 中文清晰完整版pdf

    你将学会使用backbone自有风格的模型-视图-控制器(mvc)架构,来创建结构化的javascript应用程序。 《backbone.js应用程序开发》先从了解mvc、spa和backbone的基本知识开始,然后着手构建示例应用程序——一个简单...

    Backbone.js实战.zip

    Backbone.js是一款轻量级的JavaScript库,专为构建可维护性和结构化的Web应用而设计。它主要关注数据模型的管理、视图的渲染以及URL路由,为前端开发提供了强大的框架支持。本资源是关于"Backbone.js实战"的电子书,...

    backbone.js underscore.js

    Backbone.js是一个轻量级的MVC(模型-视图-控制器)框架,主要目标是帮助开发者组织代码结构,使得前端应用更加有序和可维护。它通过提供模型、视图、集合、路由器等核心概念,帮助开发者管理数据和界面更新。 1. *...

    Backbone.js的集合

    Backbone.js 是一个轻量级的JavaScript库,它为Web应用程序提供了模型-视图-控制器(MVC)架构的结构。在Backbone.js中,集合(Collections)是模型(Models)的有序集合,它们提供了一种组织和操作数据的高效方式。...

    Backbone.js应用程序开发

    你将学会使用backbone自有风格的模型-视图-控制器(mvc)架构,来创建结构化的javascript应用程序。, 《backbone.js应用程序开发》先从了解mvc、spa和backbone的基本知识开始,然后着手构建示例应用程序——一个简单...

    前端项目-backbone-localstorage.js.zip

    `Backbone.js` 是一个流行的JavaScript库,它提供了MVC(Model-View-Controller)架构来帮助组织前端代码。在这个场景中,我们关注的是一个名为"前端项目-backbone-localstorage.js.zip"的压缩包,它包含了使用`...

    backbone.js.zip

    1. **模型-视图-控制器(MVC)**:Backbone.js引入了MVC概念,帮助开发者将数据模型与用户界面分离,提高代码的模块化。 2. **模型(Model)**:模型是应用数据的主要容器,它可以监听和触发事件,确保视图在数据...

    前端项目-backbone.radio.zip

    1. **Backbone.js框架**:Backbone.js是一个轻量级的JavaScript库,它为构建单页应用(SPA)提供了模型-视图-视图模型(MVVM)的架构模式,帮助开发者组织代码结构。 2. **Backbone.Radio**:Backbone.Radio是...

    前端项目-backbone.epoxy.zip

    1. **Backbone.js**:Backbone.js是一个轻量级的JavaScript库,为Web应用提供模型-视图-控制器(MVC)架构。它帮助组织代码,使得前端开发更有序,提供了事件处理、模型管理、路由等功能。 2. **Epoxy**:Epoxy是...

    Full Stack Web Development with Backbone.js

    - **本地Backbone.js**:介绍了如何在本地环境中设置Backbone.js环境。 - **通过内容分发网络获取Backbone.js**:讨论了另一种获取Backbone.js的方式——通过CDN(Content Delivery Network)来加载库,以减少项目...

Global site tag (gtag.js) - Google Analytics