理解 backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf ·...

20
1 理解 Backbone 在本章中,我们会介绍以下所列内容: 使用 MVC 模式设计应用 使用模型与集合定义业务逻辑 使用视图与路由器为应用的行为建模 从零开始建立一套应用程序结构 编写第一个 Backbone 应用 在应用中实现 URL 路由 使用插件来扩展应用 如何参与 Backbone 项目 1.1 导论 Backbone.js 是一套基于模型 - 视图 - 控制器(Model-View-ControllerMVC )模式的 轻量级的 JavaScript 框架,可以用来帮助开发人员创建单页 Web 应用。借助 Backbone 的帮 助,我们可以使用 REST 的方式来最小化客户端和服务器间的数据传输,从而实现了更加快 速的 Web 页面更新。 Backbone.js 日趋流行,我们在许多大型的 Web 应用和 IT 创业项目中都能看到它的身 影,例如: Groupon Now! :开发团队决定他们的第一款产品要高度基于 AJAX 技术,同时还要 做到可链接和可共享。虽然 Backbone 对于他们来说是一项全新的技术,但他们发现 其学习曲线比较平坦,上手非常快。因此仅在两周的时间里,他们就成功地发布了 一个应用服务的可用版本。 Foursquare :这个项目使用 Backbone.js 的库来为 foursquare 的各类实体(例如地点、 签到和用户等)创建模型类。开发人员发现 Backbone 的模型类提供了一套简单且轻

Upload: others

Post on 28-Sep-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用

第 1 章

理解 Backbone

在本章中,我们会介绍以下所列内容:

��使用 MVC 模式设计应用

��使用模型与集合定义业务逻辑

��使用视图与路由器为应用的行为建模

��从零开始建立一套应用程序结构

��编写第一个 Backbone 应用

��在应用中实现 URL 路由

��使用插件来扩展应用

��如何参与 Backbone 项目

1.1 导论

Backbone.js 是一套基于模型 - 视图 - 控制器(Model-View-Controller,MVC)模式的

轻量级的 JavaScript 框架,可以用来帮助开发人员创建单页 Web 应用。借助 Backbone 的帮

助,我们可以使用 REST 的方式来最小化客户端和服务器间的数据传输,从而实现了更加快

速的 Web 页面更新。

Backbone.js 日趋流行,我们在许多大型的 Web 应用和 IT 创业项目中都能看到它的身

影,例如:

�� Groupon Now! :开发团队决定他们的第一款产品要高度基于 AJAX 技术,同时还要

做到可链接和可共享。虽然 Backbone 对于他们来说是一项全新的技术,但他们发现

其学习曲线比较平坦,上手非常快。因此仅在两周的时间里,他们就成功地发布了

一个应用服务的可用版本。

�� Foursquare :这个项目使用 Backbone.js 的库来为 foursquare 的各类实体(例如地点、

签到和用户等)创建模型类。开发人员发现 Backbone 的模型类提供了一套简单且轻

Page 2: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用

◆ Backbone.js 开发秘笈2

量级的机制来捕获对象的数据和状态,并且还支持传统的继承方法。

�� LinkedIn mobile :在这个项目中,Backbone.js 用来创建其下一代基于 HTML5 的移

动互联网应用程序。由于有了 Backbone 的帮助,维持应用程序模块化、结构化和可

扩展性的这些工作一下子变得简单了,这样开发人员们才能专注于实现 LinkedIn 的

复杂的用户体验。此外,在 iOS 和 Android 这样不同的移动平台上,他们的应用程

序仍然能够使用同一份代码库。

��WordPress.com:这个是 WordPress 的一个 SaaS 的实现版本。它在其通知系统中使用

了 Backbone.js 的模型、集合以及视图。除此之外,该网站还把 Backbone.js 整合到

其统计(Stats)标签以及其主页上的一些其他功能当中。

�� Airbnb :这是一个基于社区的市场,帮助用户在世界范围内检索、发现和预订住宿

服务。其研发团队在最近的多个产品中都使用了 Backbone。不久前,他们结合使用

Backbone.js、Node.js 以及一个名为 Rendr 的库来重新开发了一个移动网站。

可以访问以下链接来了解一些应用了 Backbone.js 的其他例子:

http://backbonejs.org/#examplesBackbone.js 是由 Jeremy Ashkenas 在 2010 年开发 DocumentCloud 项目的过程中开发出来。

现在,全世界大量 Git(一种分布式的版本控制系统)开发者在使用并改进着 Backbone.js。在本章中,我们会给出一些关于如何使用 Backbone.js 的实际例子,并在遵循 MVC 以

及 Backbone 的设计模式的基础上提出了一套设计结构,并用此结构构建了一个名为 Billing的账单应用程序。在本书的后续章节中还会再涉及此设计结构。如果你之前没有任何使用

Backbone.js 进行开发的经验,那么阅读本章将对你十分有用;反之如果你是一位经验丰富

的开发者,那么你可以跳过本章。

1.2 使用 MVC 模式设计应用

MVC 是众多设计模式中的一种,广泛用

于面向用户的软件系统,例如 Web 应用程序。

它的目的是分离数据和数据的表现方法,使用

户交互变得更加容易。要理解这种模式究竟做

了哪些事情,必须先理解以下这些概念。

��模型:包含应用程序运行所需要的数据

和业务逻辑。

��视图:负责把模型展示给用户。

��控制器:负责响应用户的输入,更新模

型和视图。

在 MVC 模式的具体实现中可能会有一些

变化,但总体来讲都遵循右图所示的结构。

Page 3: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用

第 1 章 理解 Backbone ◆ 3

来自世界各地的实践表明,使用 MVC 模式能够为开发者带来很多益处:

��依照关注点范式分离的原则,把应用程序拆分成若干相互独立的部分,这样做方便

了修改或替换。

��一个模型可以在不同的视图中被渲染和展现,而不用在每个视图中都实现这个模型,

这样做实现了对代码的重用。

��对于新来的开发人员来说,它需要更少的培训,也更容易上手。

为了更好地理解 MVC 模式,我们将设计一个账单应用程序作为例子。这个例子会贯穿

本书,用于帮助我们学习一些具体的内容。

我们的这个账单应用能帮助用户产生账单、管理账单以及把账单发送给客户。依照全

球通用的做法,产生的账单应当包含参考编号、日期、关于买方和卖方的基本信息、银行账

号的详细信息、所提供的产品或服务清单以及账单总金额。我们可以参照下面的这个截图来

了解它应该是什么样子:

Wooden

Page 4: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 5: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 6: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用

SellerModel

InvoiceCollection BuyerCollection

InvoiceModel BuyerModel

InvoiceItemCollection BankAccountCollection

InvoiceItemModel BankAccountModel

Page 7: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 8: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用

◆ Backbone.js 开发秘笈8

参阅内容

��第 2 章,有关模型属性的操作的知识;

��第 3 章,有关创建模型的集合的知识。

如果想学习更多关于 JavaScript 中对象属性、方法以及面向对象编程的内容,请参见以

下链接:

https://developer.mozilla.org/en-US/docs/JavaScript/Introduction_to_Object-Oriented_JavaScript

1.4 使用视图与路由器为应用的行为建模

不同于传统的 MVC 框架,Backbone 并没有为实现控制器的功能而提供一个单独的

对象。相反,控制器的功能被分散实现在 Backbone.Router 和 Backbone.View 当中,具体

如下:

��路由器负责处理 URL 的变化,并且委派一个视图来继续处理应用。通常,路由器

异步地从存储系统中获取模型。当它获取到模型之后,随即会触发一个视图的更新

操作。

��视图负责监听 DOM 事件。(当有新的 DOM 事件产生时)它要么对模型进行更新,要

么通过路由器转移到应用的其他部分。

下图展示了一个 Backbone 应用的典型的工作流:

12.

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

Page 9: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 10: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 11: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用

EditInvoiceFormViewInvoice

PreviewInvoiceFormViewInvoice

EditInvoiceItemTableViewInvoiceItemCollection

EditInvoiceItemViewInvoiceItemModel

PreviewInvoiceItemTableViewInvoiceItemCollection

PreviewInvoiceItemViewInvoiceItemModel

Page 12: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 13: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 14: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 15: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 16: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 17: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 18: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用
Page 19: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用

第 1 章 理解 Backbone ◆ 19

视图 InvoicePageView,用于视图的渲染。

在路由器中进行参数验证

在对路由信息进行定义的时候,Backbone 并没有提供一个默认的方法来对参数的数

据类型或是格式设置限制。所有的参数都以字符串的形式传到路由器的回调函数中,

因此需要开发人员自己来编写程序验证它们。

参阅内容

��第 5 章,有关处理路由器事件的知识;

��第 4 章,有关使用 Backbone.Router 来在视图间进行切换的知识。

1.8 使用插件来扩展应用

Backbone 的核心功能其实很少,它们都得到了全面的测试和良好的维护。但是,开发

人员在创建复杂的 Web 应用的过程中可能需要使用更多的功能。Backbone 框架的优势源自

于其模块化和灵活性。现有的组件可以被方便地扩展或替换,所以许多开发人员创建出了他

们自己的插件。

在 https://github.com/documentcloud/backbone/wiki/Extensions,-Plugins,-Resources 上面有

超过 100 个插件,可以被下载并应用到你的应用当中。在本书中,我们也会用到其中一些,

所以我们需要了解如何使用插件来扩展我们的应用。

具体步骤

如果插件只是一个单个的 JavaScript 文件的话,那么只需简单地把它复制到项目中的

lib 目录中,并且在 index.html 中把它导入进来。

Page 20: 理解 Backbone - images.china-pub.comimages.china-pub.com/ebook3765001-3770000/3769833/ch01.pdf · 1.2 使用MVC 模式设计应用 MVC 是众多设计模式中的一种,广泛用