這款前端開發javascript框架在業內已是大名鼎鼎了,可是樓主尚未接觸過,看風評這年頭不懂backbone怎敢出去裝javascript
這幾天的工做還算是不緊張,速度充電php
backbone.js是一款web前端開發的javascript輕量級MVC框架;依託此框架,咱們能夠像高級語言同樣定義類、類屬性及方法,更好的組織代碼並按框架提供的數據邏輯分離方法減小代碼混亂html
須要下載這3個js文件:zepto(jquery的替代品,你能夠把它理解爲jquery的mini版)、underscore、backbone前端
<script src="js/zepto.min.js"></script> <script src="js/underscore.min.js"></script> <script src="js/backbone.min.js"></script>
模型:Backbone.Model,一個數據模型java
集合:Backbone.Collection,數據模型的一個集合jquery
視圖:Backbone.View,數據處理,注意它並不是咱們傳統認知中的頁面模版web
路由:Backbone.Router,路由配置json
這是一個標準的對象模型(數據假定爲網站最多見的用戶),initialize爲初始化方法,默認執行定義的函數或監聽必要的事件;defaults爲初始化參數,定義的參數將做爲對象模型的默認參數數據結構
var User = Backbone.Model.extend({ initialize : function(){ }, defaults : { name : '大白兔' lang : '漢語' } });
實例化對象模型User,並得到對象屬性attributes,輸出的數據結構爲:Object {name: "大白兔", lang: "漢語"}app
var user = new User; console.log(user.attributes);
調用set方法設置對象模型指定屬性、get方法能夠得到對象模型指定屬性值
var user = new User; user.set({name : '小白兔'}); console.log(user.get('name'));
初始化方法initialize中監聽屬性變化事件change並在回調中自定義屬性變化的信息提示
var User = Backbone.Model.extend({ initialize : function(){ this.bind('change:name', function(){ console.log(this.attributes); }); }, defaults : { name : '大白兔', lang : '漢語' }, }); var user = new User; user.set({name : ''});
調用save方法提交對象模型數據、設置數據提交地址url
var User = Backbone.Model.extend({ url : '/' }); var user = new User; user.save();
既然準備提交對象模型數據了,數據驗證方法validate中自定義數據校檢方法、初始化方法initialize中監聽提交失敗事件error並在回調中自定義返回錯誤的信息提示;一個關於模型的完整demo
var User = Backbone.Model.extend({ url : '/', initialize : function(){ this.bind('change:name', function(){ console.log(this.attributes); }); this.bind('error', function(){ console.log('數據提交失敗'); }); }, defaults : { name : '大白兔', lang : '漢語' }, validate : function(obj){ if(obj.name.length < 2) console.log('暱稱太短'); } }); var user = new User; user.set({name : ''}); user.save();
如今咱們要把實例化對象模型的數據存放在實例化對象集合中,就需用到集合了,這裏有點繞,樓主在這裏繞了好久;能夠理解爲經過改變集合Users的屬性model的值爲模型User,從而指定了與集合Users相關聯的模型,這裏的模型是User
var User = Backbone.Model.extend({ initialize : function(){ }, defaults : { name : '', lang : '' } }); var Users = Backbone.Collection.extend({ model : User });
實例化對象集合,併爲對象集合添加add一組需按模型模式實例化的指定數據,而後打印對象集合內全部模型數據
var users = new Users; var arr = [['大白兔', '漢語'], ['貝克漢姆', '英語'], ['齊達內', '法語']]; for(var i = 0; i < arr.length; i ++){ var user = new User({ name : arr[i][0], lang : arr[i][1] }); users.add(user); }; users.each(function(obj){ console.log(obj.attributes); });
初始化方法initialize中監聽數據添加事件add並在回調中自定義數據添加後的信息提示
var Users = Backbone.Collection.extend({ initialize : function(){ this.bind('add', function(obj){ console.log('add', obj.attributes); }); }, model : User });
既然是數據,就有添刪改;有了添加事件,對應的對象數據刪除事件remove、對象數據改變事件change;一個關於集合的完整demo
var User = Backbone.Model.extend({ initialize : function(){ }, defaults : { name : '', lang : '' } }); var Users = Backbone.Collection.extend({ initialize : function(){ this.bind('add', function(obj){ console.log('add', obj.attributes); }); this.bind('remove', function(obj){ console.log('remove', obj.attributes); }); this.bind('change', function(obj){ console.log('change', obj.attributes); }); }, model : User }); var users = new Users; var arr = [['大白兔', '漢語'], ['貝克漢姆', '英語'], ['齊達內', '法語']]; for(var i = 0; i < arr.length; i ++){ var user = new User({ name : arr[i][0], lang : arr[i][1] }); users.add(user); }; user.set({ name : '卡恩', lang : '德語' }); users.remove(user);
本想把視圖也一塊兒寫完,可是發現視圖必須有相對應模型,因而視圖模型的合做纔是重點,雖然樓主也作好了例子但還不甚了了,待成熟後再專門說省得誤人誤己,只留一個demo
underscore爲咱們提供了模板引擎,書寫格式以下所示,相似於jquery tmpl
<ul class="user"></ul> <script id="user_tmpl" type="text/template"> <li><p><%=name %></p><div><%=lang %></div></li> </script>
而後是javascript部分,這部分還沒思索透具體理解暫不寫
var User = Backbone.Model.extend({ defaults : { name : '', lang : '' } }); var Users = Backbone.Collection.extend({ model : User }); var users = new Users; var Userv = Backbone.View.extend({ initialize : function(){ _.bindAll(this, 'render'); users.bind('add', this.render); }, el : '.user', template : _.template($('#user_tmpl').html()), render : function(){ $(this.el).append(this.template(this.model.toJSON())); return this; } }); var arr = [['大白兔', '漢語'], ['貝克漢姆', '英語'], ['齊達內', '法語']]; for(var i = 0; i < arr.length; i ++){ var user = new User({ name : arr[i][0], lang : arr[i][1] }); users.add(user); new Userv({ model : user }); };
$data = json_decode(file_get_contents('php://input')); die(json_encode($data));