backbonejs学习笔记

Backbone是一个轻量级的前端MVC框架,用于结构化管理页面中的大量JS,建立与服务器、视图间的无缝连接,为构建复杂的应用提供基础框架。最适合的应用场景是单页面应用,并且页面上有大量数据模型,模型之间需要进行复杂的信息沟通。backbone所依赖的underscore类库提供了60多个函数用于处理数组操作、函数绑定以及javascript模板机制。

在Backbone中,DOM选择器、DOM事件和AJAX,都使用了jQuery的方法。如果不想使用jQuery或Zepto,而是使用其它的、或自定义库,只要该库中实现了与jQuery语法相同的DOM选择器、事件管理和AJAX方法,那么就不会任何问题。

Backbone中的MVC:model,view,collection.

1.model:对业务中实体对象抽象、进行数据验证、做持久化、与服务器端数据进行交互,是携带数据流窜于各个模块之间的东西。

2.collection:可以增加元素,删除元素,获取长度,排序,比较等一系列工具方法,说白了就是一个保存 models的集合类

3.view:绑定html模板,绑定界面元素的事件,初始的渲染,模型值改变后的重新渲染和界面元素的销毁等

4.还有一个Router:用来控制url指向哪个函数。在单页面应用中可以通过hash的方式(#page)进行视图

下面是各模块中个人感觉比较重要的地方总结:

Model:

Initialize:在被实例化时调用;defaults:设置默认属性;对象自带get,set方法,可以直接调用获取/设置默认属性值。

1.监听属性变化:bind ‘change‘:

2.Validate验证规则添加方式:在Model.extend中定义validate,其中抛出的异常会被invalid捕捉到。Invalid异常处理的添加方式:

a.通过实例的on触发:

b. 在initialize中定义:

set中validate验证触发方式:

a.set默认不进行验证,可添加{‘validate‘:true}

b.通过save();触发。

两者的差异是通过{‘validate‘:true}如果验证失败将不会执行该次set;通过save()抛出异常的同时还会执行本次set操作。

3.对象的保存和获取:save()保存对象,需要在extend中指定url,save时会发post请求到后台并发送json对象,调fetch方法可以发get请求到后台请求json数据。

4.还有一点值得一提的是关于url和urlRoot的事情,如果设置了url,那么你的CRUD ("create", "read", "update", or "delete")都会发送对应请求到这个url上,但是这样有一个问题,就是delete请求,发送了请求,但是却没有发送任何数据,那么你在服务器端就不知道应该删除哪个对象(记录),所以这里又一个urlRoot的概念,你设置了urlRoot之后,你发送PUT和DELETE请求的时候,其请求的url地址就是:/baseurl/[model.id],这样你就可以在服务器端通过对url后面值的提取更新或者删除对应的对象(记录)关于服务器的异步操作都是通过Backbone.sync这个方法来完成的,调用这个方法的时候会自动的传递一个参数过去,根据参数向服务器端发送对应的请求。比如你save,backbone会判断你的这个对象是不是新的,如果是新创建的则参数为create,如果是已存在的对象只是进行了改变,那么参数就为update,如果你调用fetch方法,那参数就是read,如果是destory,那么参数就是delete。也就是所谓的CRUD,而这四种参数对应的请求类型为POST,GET,PUT,DELETE。你可以在服务器根据这个request类型,来做出相应的CRUD操作。

Routes:

匹配#标签之后内容的方法,有两种:一种是用“:”来把#后面的对应的位置作为参数;还有一种是“*”,它可以匹配所有的url。触发方式:1.Backbone.history.start();2.类似jquery的trigger,手动触发。

路由是以哈希对象中定义顺序倒叙进行解析的

Backbone默认会通过Hash的方式来记录地址的变化,对于不支持onhashchange的低版本浏览器,会通过setInterval心跳监听Hash的变化,因此你不必担心浏览器的兼容性问题。

View:

处理模型的表现。View.extend可以使用render方法替换模板填充页面(模板中定义的所有变量必须在render的时候传递参数过去,不然就会报错)。

支持复杂的模板替换,如foreach循环/ifelse等。

模板填充、模板内循环使用的是underscore库的函数

1. 通常情况下,在浏览器看到一个script标签的时候,它会试着将这个标签解释为JavaScript脚本。这不会是你希望的,因为你创建的模板并不包含可执行的脚本。替代的,它包含的是一个HTML模板。为了阻止浏览器执行脚本的尝试,给这个标签增加一个type属性,将它设置为javascript以外的类型,或者任何浏览器可以识别的类型。最常用的type是text/html-template或者类似的一些类型。

2. 每一个Backbone的view都会有一个el属性,不管视图有没有被插入页面,每个视图都知道当前的Dom元素,即this.el,el是从视图的tagName、className或者id等属性中创建的元素,没有这些值el就是空div:如果没有显示声明,Backbone会默认的构造一个,表示一个空的div元素。el标签可以在定义view的时候在属性中声明,也可以在实例化view的时候通过参数传递。

3. Backbone视图提供一种添加事件到el的快捷方法:使用events方法事件,绑定过程非常简单,类似:

events对象为{‘eventType selector‘: ‘callback‘}这种格式,selector是可选的,不提供便绑定值el上。这种绑定使用了事件冒泡机制,不管el内容是否改变都可以一直触发。

4. 在view中使用this.model指向模型实例,在实例化时传递到视图中,类似:new TodoView({ model: new Todo });model就是以这种方式和view进行关联的

5.Backbone.js中的每一个对象都包含事件系统,它让每一个Backbone.js对象都能触发事件并能得到处理。你可以使用on或off方法绑定和移除自定义事件。在任何地方,你都可以使用trigger方法触发这些绑定的事件,所有绑定过该事件的方法都会被执行

Collection:

为集合添加模型时会触发add事件;

内部模型排序方式使用comparator方法控制。

集合的fetch函数将发送一个get请求道服务器,获取远程数据,最后刷新集合触发refresh事件。

以官网的todos为例说明MVC设计思想:

1.功能描述:

* 任务管理

添加任务

修改任务

删除任务

* 统计

任务总计

已完成数目

输入框填内容,enter时添加到页面上,复选框选中任务,显示多少总剩余、多少完成,双击修改任务,删除任务。

2.Model:对应每一个任务,提供每个任务的名称,是否完成flag,order序号,并提供一个保存自身完成状态的函数

3.Collection:model的集合,提供获取获取下一个要插入数据的序号、统计多少未完成、多少完成,排序方式

4.事件绑定及渲染view:每个任务绑定选中、双击修改、删除等事件;指定模板

负责显示view:控制新增任务、全选、全删除。和model一对一关系,在创建一个model的时候就会创建一个该view

5.监听机制:在view和collection初始化时监听,比如说渲染view监听单个任务的变化,发生变化就会更改选中样式;负责显示的view会监听collection的变化,有新增时就会把新任务添加显示到页面上。我认为事件监听是backbonejs最核心的东西之一,通过事件监听使得各模块在功能上做到分离但又协同工作。

网络资源整理:

资源列表博客:

http://www.ghugo.com/backbone-learned-and-tutorials/

让我们用Backbone.js来写一个HelloWorld程序。

http://blog.csdn.net/soasme/article/details/6581029

Backbone入门教程:

https://github.com/the5fire/backbonejs-learning-note/blob/master/chapters/01-hello-backbonejs.rst

初探backbone:

http://www.cnblogs.com/yexiaochai/p/3219402.html

backbone.js 初探

http://weakfi.iteye.com/blog/1391990

Backbone 中文API:

http://www.csser.com/tools/backbone/backbone.js.html

Backbone.js 0.9.2 中文解释

http://www.cnblogs.com/GoogleGetZ/p/3651321.html

Backbone源码分析-Backbone架构+流程图

http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html

Backbone.js入门指南教程中文版[ZT]

http://blog.appdevp.com/archives/400

Backbone 入门指南:

http://yujianshenbing.iteye.com/blog/1748447

利用BackboneJS更好组织jQuery应用的架构

http://www.linuxeden.com/html/news/20131112/145443.html

backbonejs学习笔记

时间: 2024-10-26 09:44:42

backbonejs学习笔记的相关文章

前端javascript框架之BackboneJS学习笔记

<!DOCTYPE html><html><head><meta charset="utf-8"><script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script><script src="http://documentcloud.github.com/underscore/underscore-m

Backbone学习笔记一Backbone中的MVC

原文章地址http://bigdots.github.io/2015/12/01/Backbone学习笔记(一)/#more Backbone.js为复杂WEB应用程序提供模型(models).集合(collections).视图(views)的结构.其中models用于绑定键值数据和自定义事件:collections附有可枚举函数的丰富API: views可以声明事件处理函数,并通过RESRful JSON接口连接到应用程序. 下面通过实例来学习backbone的MVC.实例来自http://

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl