随着JavaScript程序变得越来越复杂,往往需要一个团队协作开发,这时代码的模块化和组织规范就变得异常重要了。MVC模式就是代码组织的经典模式。
(……MVC介绍。)
(1)Model
Model表示数据层,也就是程序需要的数据源,通常使用JSON格式表示。
(2)View
View表示表现层,也就是用户界面,对于网页来说,就是用户看到的网页HTML代码。
(3)Controller
Controller表示控制层,用来对原始数据(Model)进行加工,传送到View。
由于网页编程不同于客户端编程,在MVC的基础上,JavaScript社区产生了各种变体框架MVP(Model-View-Presenter)、MVVM(Model-View-viewmodel)等等,有人就把所有这一类框架的各种模式统称为MV*。
框架的优点在于合理组织代码、便于团队合作和未来的维护,缺点在于有一定的学习成本,且限制你只能采取它的写法。
Backbone的加载
Backbone.View
基本用法
Backbone.View方法用于定义视图类。
上面代码通过Backbone.View的extend方法,定义了一个视图类AppView。该类内部有一个render方法,用于将视图放置在网页上。
使用的时候,需要先新建视图类的实例,然后通过实例,调用render方法,从而让视图在网页上显示。
新建视图实例时,通常需要指定Model。
initialize方法
视图还可以定义initialize方法,生成实例的时候,会自动调用该方法对实例初始化。
上面代码定义了initialize方法之后,就省去了生成实例后,手动调用appView.render()的步骤。
el属性,$el属性
除了直接在render方法中,指定“视图”所绑定的网页元素,还可以用视图的el属性指定网页元素。
tagName属性,className属性
如果不指定el属性,也可以通过tagName属性和className属性指定。
template方法
视图的template属性用来指定网页模板。
"), });
"), initialize: function(){ this.render(); }, render: function(){ this.$el.html(this.template({who: 'world!'})); } });
实际应用中,一般将模板放在script标签中,为了防止浏览器按照JavaScript代码解析,type属性设为text/template。
events属性
listento方法
remove方法
remove方法用于移除一个视图。
子视图(subview)
在父视图中可以调用子视图。下面就是一种写法。
Backbone.Router
Router是Backbone提供的路由对象,用来将用户请求的网址与后端的处理函数一一对应。
首先,新定义一个Router类。
routes属性
Backbone.Router对象中,最重要的就是routes属性。它用来设置路径的处理方法。
routes属性是一个对象,它的每个成员就代表一个路径处理规则,键名为路径规则,键值为处理方法。
如果键名为空字符串,就代表根路径。
路径规则的写法。
Backbone.history
设置了router以后,就可以启动应用程序。Backbone.history对象用来监控url的变化。
idAttribute属性
Model实例必须有一个属性,作为区分其他实例的主键。这个属性的名称,由idAttribute属性设定,一般是设为id。
get方法
set方法
on方法
on方法用于监听对象的变化。
urlroot属性
该属性用于指定服务器端对model进行操作的路径。
上面代码指定,服务器对应该Model的路径为/user。
fetch事件
fetch事件用于从服务器取出Model。
save方法
如果一个Model实例不含有id属性,则save方法将使用POST方法新建该实例。
如果一个Model实例含有id属性,则save方法将使用PUT方法更新该实例。
destroy方法
Backbone.Collection
Collection是同一类Model的集合,比如Model是动物,Collection就是动物园;Model是单个的人,Collection就是一家公司。
add方法,remove方法
Model的实例可以直接放入Collection的实例,也可以用add方法添加。
get方法,set方法
get方法用于从Collection中获取指定id的Model实例。