最轻量级的前端Mvc框架backbone

最轻量级的前端Mvc框架backbone依赖最轻量级的库understore

backbone并非将前端再次切分为mvc,而是分为了七大模块,分别是:EventsModelCollectionRouterHistorySyncView

一个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>
上一篇:Linux文件同步工具之rsync


下一篇:Linux下 CentOS 7 对比6 改动详解 及 系统安装