什么是Backbone?
backbone.js,是开发web app的框架。凭借它,我们可以使用javascript编写复杂交互的web app,因为backbone提供了强大的对模型、视图和交互的抽象。 以前,我们开发web app,比较依赖比如jQuery:
1。将所有交互看作对dom节点的操作,虽然也可通过事件(event)解藕复杂的交互,但是无法脱离dom模型,包括事件的传递,都是沿着dom树进行的;
2。即使是有起到模型作用的对象,一般也通过jQuery附着在dom树上
Backbone.js 是一个 模型(Model)-视图(View)-控制器(Controller) 的MVC 框架。通过它可以轻松将页面中的数据、逻辑、视图解耦,依照Backbone进行代码结构组织,你可以将项目中的数据交互、业务逻辑、用户界面等工作,分配给多个同事同时开发,并能有序地组织到一起。同时,这对于大型和复杂项目的维护开发非常有帮助。 下面,通过编写最简单的应用,方便初学者上手。
哪些著名的网站也在用Backbone?
LinkedIn mobile
Foursquare
还有很多很多,比如 Hulu , Do , Groupon Now! , Pandora 等等!
谁用谁知道,基于Backbone的应用真的太多太多了。存在即是合理的,为啥大家都用它,一定有它的道理!
Backbone如何入门,初学者要怎么开始?
在正式学习Backbone之前,你需要准备一些东西:
首先,你需要获取Backbone框架源文件:http://documentcloud.github.com/backbone/
Backbone依赖于Underscore框架的基础方法,因此,你同时需要下载Underscore框架的源文件:http://documentcloud.github.com/underscore/
在Backbone中,对DOM和事件的操作依赖于第三方库(如jQuery或Zepto),你只需要选择其中一个下载:
jQuery:http://jquery.com/
Zepto:http://zeptojs.com/
看起来好像挺麻烦的样子,但Backbone的目的是在于使用简单的框架来构建复杂的应用,因此麻烦并不表示它很复杂。完整引入如下:
<script type="text/javascript" src="jquery-1.8.2.min.js"></script> <script type="text/javascript" src="underscore-min.js"></script> <script type="text/javascript" src="backbone-min.js"></script>注意:jquery要使用1.8版本以后的,否则有些功能没有。
Backbone主要涉及部分:model,view,collection,router(路由器)。Backbone虽然实现的是MVC模式,但它并没有提供控制器(Controller)组件,而实际起控制作用的也是由View承担,所以在最基本情况下只需要model,view就可以建立起一个应用。而collection,router(路由器),有兴趣的可作为扩展。
数据模型(model)
模型 的核心是数据,但其中也可以包含一些简单的逻辑: 转换、验证、计算属性和访问控制。
1.创建model
<script type="text/javascript">
// 定义People模型类,同时设置默认属性值
var People = Backbone.Model.extend({
defaults : {//默认属性值,每个实例化的对象默认具备这些属性
name : '张三',
age : '22',
address : '北京'
}
});
// 实例化模型对象
var people = new People();
</script>
通过Model的扩展方法extend创建个模型类People,通过这个类可以实例化出具体的模型对象。
2.操作model属性值
一旦创建了model实例,可以通过set、get来操作属性。set方法为属性赋值,get方法获得属性值。
var name = people.get("name"));
people.set("name", "李四");
视图(view)
view是负责与dom元素打交道的,通过视图可以渲染页面、可以为dom元素绑定事件来监听其动态、也可以负责处理业务逻辑。
1.创建视图
<div id="myDemo">
<p>
<input type="button" value="Create" id="create" />
<input type="button" value="Read" id="read" />
<input type="button" value="Update" id="update" />
<input type="button" value="Delete" id="delete" />
</p>
</div>
<script type="text/javascript">
var PeopleView = Backbone.View.extend({
el : $("#myDemo"),//纯的dom元素,用于该view操作的具体对象
initialize : function() {
//view的初始化方法,创建view实例时执行
},
events : {//给dom元素绑定事件 格式:事件名称 选择器 : 事件处理函数
'click #create' : 'createData',
'click #read' : 'readData',
'click #update' : 'updateData',
'click #delete' : 'deleteData'
},
createData : function() {
// todo
},
readData : function() {
// todo
},
updateData : function() {
// todo
},
deleteData : function() {
// todo
},
render : function() {
//利用el属性渲染页面
//如:this.el.innerHTML = 'Hello World!';
}
});
//实例化view
var view = new PeopleView();
view.render();//渲染页面,一般可用在初始化方法initialize中
</script>
通过View的扩展方法extend创建个视图类PeopleView,通过这个类可以实例化出具体的视图对象。同时视图对象还存在个model属性,可以在实例化视图时作为参数传入,如:var view = new PeopleView({model:people}), 这样视图对象内部就可通过this.model来或者这个模型实例。
好的,上面已经对model、view的单独使用做了描述,下面做个完整的demo,将二者结合起来。
程序目标:修改个人信息。如:姓名、年龄。
在线演示:
引入js
<script type="text/javascript" src="http://www.see-source.com/js/backbone/jquery-1.8.1.js"></script> <script type="text/javascript" src="http://www.see-source.com/js/backbone/underscore.js"></script> <script type="text/javascript" src="http://www.see-source.com/js/backbone/backbone.js"></script>
Html代码
<body> <div id="myDemo" style="border:#66CC33 solid 1px; padding:5px;"></div> </body>Js代码
<script type="text/javascript">
//步骤1. 创建model类。
var People = Backbone.Model.extend({
//设置默认的属性
defaults : {
"name" : '',
"age" :0
}
});
//步骤2. 实例化model
var people = new People({
"name" : '阿三',
"age" :22
});
//步骤3 创建view类
var PeopleView = Backbone.View.extend({
//设定这个视图的dom元素,也可以通过设定tagName, className, id 或者 attributes。如果没有特别设定,Backbone会为它套上空的div标签
el : $("#myDemo"),
model:people,
initialize : function() {//构造方法
this.render(); //创建view实例时,先渲染下页面
},
events : {//给dom元素绑定事件
"click .submit" : "update" //"修改"按钮添加click事件,update为事件处理函数
},
update : function(){
var name = $("#people_name").val();//获取姓名
var age = $("#people_age").val();//获取年龄
this.model.set("name", name);//更新到model中
this.model.set("age", age);
this.render();//重新渲染页面
},
render : function() {//渲染页面
var html = "姓名:<input id='people_name' value=" + this.model.get("name") + "><br/>";
html += "年龄:<input id='people_age' value=" + this.model.get("age") + "><br/>";
html += "<input type='submit' class='submit' value='修改'><br/>";
html += "我的姓名:"+this.model.get("name")+",我的年龄:"+this.model.get("age")+"<br/>";
this.el.innerHTML = html;
}
});
//步骤4 实例化view, 同时执行构造方法initialize
var view = new PeopleView();
//view.render();
</script>


