最轻量级的前端Mvc框架backbone依赖最轻量级的库understore
backbone并非将前端再次切分为mvc,而是分为了七大模块,分别是:Events、Model、Collection、Router、History、Sync、View
一个Model对应一个View,如果是多个Model时,则进化为一个Collection对应一个View
Sync负责与服务器端进行交互
官方网站
http://backbonejs.org/
github地址
https://github.com/jashkenas/backbone
demo:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="https://cdn.bootcss.com/jquery/1.9.1/jquery.js"></script> <script src="https://cdn.bootcss.com/underscore.js/1.8.3/underscore-min.js"></script> <script src="https://cdn.bootcss.com/backbone.js/1.3.3/backbone-min.js"></script> </head> <body> <script type="text/javascript"> /** * 知识点:实例化模块 */ // var model = new Backbone.Model(); // var Collection = new Backbone.Collection(); // var view = new Backbone.View(); /** * 知识点:get/set * Model赋值 */ // var model = new Backbone.Model(); // model.set("name","Lee"); // alert(model.get("name")); /** * 知识点:Model转化为Collection * Model实例化、初始化时快速赋值 */ // var model_1 = new Backbone.Model({'name':'Lee'}); // var model_2 = new Backbone.Model({'name':'Mp'}); // var Collection = new Backbone.Collection(); // Collection.add(model_1); // Collection.add(model_2); // alert(JSON.stringify(Collection)); /** * 知识点:extent * 继承?Model中定义实例方法和静态方法 */ // var M = Backbone.Model.extend // ( // { // //第一个参数是一个对象,用于定义实例方法 // aaa:function(){ // alert("aaa"); // } // }, // { // //第二个参数是一个对象,用于定义静态方法 // bbb:function(){ // alert("bbb"); // } // } // ); // var _m = new M(); // _m.aaa(); //调用实例方法 // M.bbb(); //调用静态方法 /** * 知识点:defaults * Model初始化变量(可以初始化方法,但暂时不知道如何调用) */ // var M = Backbone.Model.extend({ // defaults:{ // name:"Lee" // } // }) // var m = new M(); // alert(m.get("name")); /** * 知识点:initialize/on/change:name * 构造函数、事件监听,指定对象事件监听 */ // var M = Backbone.Model.extend({ // defaults:{ // name:"Lee" // }, // //构造函数 // initialize : function(){ // //绑定事件:当model的值发生改变时 // //如果你想指定某一个值发生改变,可以'change'改为:'change:name' // this.on('change:name',function(){ // alert("change"); // }) // } // }) // var m = new M(); // m.set("name","Mp"); /** * (重难点) * 知识点:View、ListenTo * Model和View相结合 * ListenTo 和 on的区别就在于第一个参数this.model,它将作为第三个参数this.show的参数 * 根据场景,这个model实质上是被改变的name */ // var M = Backbone.Model.extend({ // defaults:{ // name:"Lee" // } // }); // var V = Backbone.View.extend({ // initialize:function(){ // this.listenTo(this.model,'change',this.show); // }, // show:function(model){ // $("body").append('<div>' + model.get("name") + '</div>'); // } // }); // var m = new M(); // var v = new V({model:m}); // m.set("name","Mp"); /** * 知识点:sync、save * 创建和更新,但暂时不知道怎么和服务器交互 */ // Backbone.sync = function(method,model){ // alert(method + ":" + JSON.stringify(model)); // model.set("id",1); //这个model == m,当save发生时、会检测model有没有id这个属性, // //没有就是create事件,如果有就是update事件.所以第一次会是create,第二次会是update // //所以如果想一开始就是update,可以直接在外部使用m.set("id",1); // }; // var M = Backbone.Model.extend({ // defaults:{ // name:"Lee" // }, // url:"/user" // }); // var m = new M(); // m.save(); // m.save({name:'Mp'}); /** * 知识点: Collection.fetch * 读取,暂时不知道如何和服务器交互 */ // Backbone.sync = function(method,model){ // //如果是fetch的话就是read事件 // alert(method + ":" + JSON.stringify(model)); // }; // var C = Backbone.Collection.extend({ // initialize:function(){ // this.on('reset',function(){ // alert("123"); // }); // }, // url:'/user' // }); // var c = new C(); // c.fetch(); /** * 知识点:Router,routes * 路由,学习hash配置和函数、参数等 */ // var R = Backbone.Router.extend({ // routes:{ // "help": "help", //index.html#help // "search/:query": "search", //index.html#search/asd // "search/:query/p:page": "search2" //index.html#search/asd/p1 // }, // help:function(){alert("help")}, // search:function(query){alert(query)}, // search2:function(query,page){alert(query + "~~~~~" + page)} // }) // var r = new R(); // Backbone.history.start(); /** * 知识点:View 的 el,events */ // var V = Backbone.View.extend({ // el:$("body"), // events:{ // 'click #myinput' : 'aaa', // 'mouseover li':'bbb' // }, // aaa:function(){alert("123")}, // bbb:function(){alert("456")} // }) // var v = new V(); </script> <input type="button" id="myinput" value='按钮'></input> <ul> <li>111</li> <li>111</li> <li>111</li> <li>111</li> </ul> </body> </html>