1、概念javascript
Backbone.js是一套基于(模型-视图-控制器 MVC)模式的轻量级的javascript框架。css
2、使用MVC模式设计应用html
一、模型:应用程序运行所须要的数据和业务逻辑.java
二、视图:负责把模型展现给用户.json
三、控制器:负责响应用户的输入,更新模型和视图.服务器
简单术语翻译对照:散列表(hash)、 模型(model)、 视图(view) 、集合(collection)、 回调函数(callback)、 绑定(bind)框架
3、下载和依赖dom
Backbone.js 惟一重度依赖 Underscore.js. xss
对于 RESTful , history 的支持依赖于 Backbone.Router , ide
DOM 处理依赖于 Backbone.View , json2.js, 和 jQuery ( > 1.4.2) 或 Zepto 之一.
4、API参考
http://www.css88.com/doc/backbone/#Events-bind 中文文档
http://www.the5fire.com/the5fire-mobile-site-base-on-backbonejs.html 实例
1、建立一个模型
模型负责存放应用于所需的数据、对数据进验证、执行访问控制以及实现所需特定的业务逻辑,能够经过Backbone.Model对象的方式来定义一个模型.
1 <script> 2 var sModel = Backbone.Model.extend({ // 建立一个模型 3 4 }) 5 6 var newModel = new sModel({ // 实例化模型,并设置初始值 7 lastNumber: "04,04,04", 8 closeTime: "2014-12-01 15:52:09", 9 "status": "55", 10 "issue": "141201037" 11 }); 12 13 $("#sidebar").html(newModel.get("lastNumber")); 14 </script> 15 16 // 或者能够写成 17 18 <script> 19 var sModel = Backbone.Model.extend({ 20 default:{ 21 lastNumber: "04,04,04", 22 closeTime: "2014-12-01 15:52:09", 23 "status": "55", 24 "issue": "141201037" 25 } 26 }) 27 var newModel = new sModel(); 28 29 $("#sidebar").html(newModel.get("lastNumber")); 30 </script>
能够将模版写在<script>中
1 <script type="text/template" id="post-list-template"> 2 <a href="#post/<%= id %>"> 3 <div class="line"> 4 <%= title %> 5 <div class="row small-font"> 6 <div class="span">分类:<%= category %></div> 7 <div class="span">发布于:<%= create_time %></div> 8 </div> 9 </div> 10 </a> 11 </script> 12 13 <script> 14 var PostView = Backbone.View.extend({ 15 tagName: "dl", 16 listTemplate: _.template($('#post-list-template').html()) // _.template方法是underscore.js框架中的方法 17 }) 18 </script>
2、Model下的方法
一、extend():扩展Backbon.Model的方法
二、clone() 复制模型
var newModel = itemModel.clone();
三、isNew() :模型是否保存到了服务器中,若是模型无id视为新模型 itemMode.isNew();
四、change():手动触发change()事件
三、default:设置默认的属性值
1 var InvoiceItemModel = Backbone.Model.extend({ 2 default:{ 3 date: "", 4 description: "", 5 price: 0, 6 quantity: 1 7 } 8 })
四、attributes 属性:也是修改模型属性所用,建议使用set()方法
3、模型属性的操做
一、get()方法来获取属性的值
var quantity = itemModel.get("quantity"); // 若是不存在返回undefined
二、set()方法来更新、建立单个属性的值
1 itemModel.set("quantity", 5); // 单个更新,若是经过验证返回true,不然返回false 2 3 itemModel.set({ // 多个更新 4 quantity: 10, 5 price: 10 6 })
三、unset()删除模型中删除一个属性
itemModel.unset("quantity"); // 删除一个属性
四、clear()删除模型中全部的属性
itemModel.clear();
五、has()用来检查模型中是否有某一属性
if(!itemModel.has("quantity")){
console.log("模型中有此属性");
}
六、escape()得到HTML转义后的属性
var hacker = new Backbone.Model({
name : "<script>alert('xss')<\/script>"
})
var escaped_name = hacker.escape("name"); // 将转义成<script>alert('xss')</script>
七、url():返回模型资源在服务器上位置的相对 URL 。 若是模型放在其它地方,可经过合理的逻辑重载该方法
八、urlRoot 集合外部的模型,经过指定 urlRoot 来设置生成基于模型 id 的 URLs 的默认 url 函数
1 var Book = Backbone.Model.extend({urlRoot : '/books'}); 2 var solaris = new Book({id: "1083-lem-solaris"}); 3 alert(solaris.url())
4、模型的标识符操做
每一个模型都有一个ID属性,来在不一样杠间进行区分
一、设置id
itemModel.id = "model" + Math.random();
二、获取id
var modelId = itemModel.id;
backbone用集合来管理多个模型
1、建立模型的集合
1 <script> 2 3 // 建立一个模型 4 var InvoiceItemModel = Backbone.Model.extend({ 5 default: { 6 descripion:"", 7 price: 0, 8 quantity: 1 9 } 10 }) 11 12 // 方法一:经过模型对象的名来传入 13 var Collection = Backbone.Collection.extend({ 14 model: InvoiceItemModel 15 }) 16 17 // 方法二:建立一个新的集合,并传入模型的初始化 18 var invoiceCollection = new InvoiceItemCollection([ 19 {descripion:"Toy House", price: 22, quantity: 3}, 20 {descripion:"Toy House1", price: 23, quantity: 4}, 21 {descripion:"Toy House2", price: 24, quantity: 5}, 22 {descripion:"Toy House3", price: 25, quantity: 6} 23 ]) 24 </script>
1、概念
视图对象主要用来渲染数据以产生html代码,一个视图能够绑定到DOM中的HTML元素.
2、渲染视图
当把数据显示给用户都须要用backbone的视图来进行渲染。
1 <script> 2 // 建立一个视图 3 var v1 = Backbone.View.extend({ 4 el: "#box", 5 6 // 初始化时调用视图 7 init: function(){ 8 this.html = "woodn toy house" 9 }, 10 11 // 读取视图 12 render: function(){ 13 $(this.el).html(this.html); 14 } 15 }) 16 17 // 实例化视图 18 var oV1 = new v1(); 19 oV1.init(); 20 21 // 读取视图 22 oV1.render(); 23 </script>
读取模版中的数据
1 <script> 2 var m1 = Backbone.Model.extend({ 3 descripion:"Toy House", 4 price: 22, 5 quantity: 3 6 }) 7 8 var oM1 = new m1(); 9 10 // 建立一个视图 11 var v1 = Backbone.View.extend({ 12 el: "#box", 13 14 // 读取视图 15 render: function(){ 16 $(this.el).html("hello " + oM1.descripion + " " + oM1.price + " " + oM1.quantity); 17 } 18 }) 19 20 // 实例化视图 21 var oV1 = new v1(); 22 23 // 读取视图 24 oV1.render(); 25 </script>