首页 > 其他 > 详细

通过helloworld来认识下backbone

时间:2014-03-08 14:53:17      阅读:509      评论:0      收藏:0      [点我收藏+]

Backbone主要涉及3部分:model,collection和view。而这个框架的优势在于:数据与视图分离,通过操作model来自动更新view。

根据我的个人经验,直接写个简单的例子是最最直观的,那么从hello world开始吧!

程序目标:创建人员,将人员添加入队伍,删除人员,清空队列。
bubuko.com,布布扣
步骤1. model,理解成一个数据个体。

bubuko.com,布布扣
var People = Backbone.Model.extend({
    //每个人都有他自身的属性
    defaults : {
        "name" : ‘阿三‘
    }
});
bubuko.com,布布扣

 

步骤2. collection,理解成数据队列。

bubuko.com,布布扣
var Peoples = Backbone.Collection.extend({
    //对集合的类型进行设定,这里设定为人的集合
    model : People
});
bubuko.com,布布扣

 

步骤3. view,每个伟大的视图背后,都有默默的collection或者model。

bubuko.com,布布扣
var View = Backbone.View.extend({
    //设定这个视图的dom元素,也可以通过设定tagName, className, id 或者 attributes。如果没有特别设定,Backbone会为它套上空的div标签
    el : $("body"),
    initialize : function() {
        //集合的事件绑定
        this.collection.bind("add", this.addOne);
        this.collection.bind("remove", this.delOne);
    },
    //使用了jquery的on方法,提供对视图的事件代理
    events : {
        "click #add" : "add",
        "click .del" : "del",
        "click #clear" : "clear",
    },
    add : function() {
        var name = prompt("请输入人名");
        //创建一个新model
        var people = new People({
            ‘name‘ : name
        });
        //并添加到人员队列中,会触发collection的add事件
        peoples.add(people);
    },
    del : function(obj) {
        //获取要删除的是哪个model
        var delWho = obj.currentTarget.id;

        //会触发collection的remove事件
        peoples.remove(delWho);
    },
    //当collection发生了add事件
    addOne : function(model) {
        //每个model会随机生成一个唯一的cid,用来识别,区分
        $("#list").append("<li>" + model.get(‘name‘) + "说:hello world!<button class=‘del‘ id=‘" + model.cid + "‘>删除</button></li>");
    },
    //当collection触发了remove事件
    delOne : function(model) {
        //使用jquery的remove方法,删除dom和解除绑定的事件
        $(‘#‘ + model.cid).parent().remove();
    },
    //清空数据
    clear : function() {
        this.collection.reset();
        this.clearAll();
    },
    //清空dom
    clearAll : function() {
        $(‘#list‘).empty();
    }
});
bubuko.com,布布扣

 

步骤4. 程序入口

bubuko.com,布布扣
var peoples = new Peoples;
var app = new View({
    collection : peoples
});
bubuko.com,布布扣

这个例子还是比较直观的。把每个人当作model,队伍为collection,我们看到的界面是view。view绑定了collection的加减事件。通过对collection的操作,自动更新视图。

完整代码:

bubuko.com,布布扣
<%@ page language="java" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
%>
<!DOCTYPE html>
<html>
    <head>
        <title>backbone.js-Hello World</title>
    </head>
    <body>
        <button id="add">添加</button>
        <button id="clear">清空</button>
        <h3>队列</h3>
        <ul id="list"></ul>
    </body>
    <script src="<%=path %>/demo/backone/jquery-1.8.3.js"></script>
    <script src="<%=path %>/demo/backone/underscore-min.js"></script>
    <script src="<%=path %>/demo/backone/backbone-min.js"></script>
    <script type="text/javascript">
    (function() {
        //model,理解成一个数据个体
        var People = Backbone.Model.extend({
            //每个人都有他自身的属性
            defaults : {
                "name" : null
            }
        });
        
        //collection,理解成数据队列
        var Peoples = Backbone.Collection.extend({
            //对集合的类型进行设定,这里设定为人的集合
            model : People
        });
    
        //view,每个伟大的视图背后,都有默默的collection或者model
        var View = Backbone.View.extend({
            //设定这个视图的dom元素,也可以通过设定tagName, className, id 或者 attributes。如果没有特别设定,Backbone会为它套上空的div标签
            el : $("body"),
            initialize : function() {
                //集合的事件绑定,用来自动更新视图
                this.collection.bind("add", this.addOne);
                this.collection.bind("remove", this.delOne);
            },
            //使用了jquery的on方法,提供对视图的事件代理
            events : {
                "click #add" : "add",
                "click .del" : "del",
                "click #clear" : "clear",
            },
            add : function() {
                var name = prompt("请输入人名");
                //创建一个新model
                var people = new People({
                    ‘name‘ : name
                });
                //并添加到人员队列中,会触发collection的add事件
                peoples.add(people);
            },
            del : function(obj) {
                //获取要删除的是哪个model
                var delWho = obj.currentTarget.id;
                
                //会触发collection的remove事件
                peoples.remove(delWho);
            },
            //当collection发生了add事件
            addOne : function(model) {
                //每个model会随机生成一个唯一的cid,用来识别,区分
                $("#list").append("<li>" + model.get(‘name‘) + "说:hello world!<button class=‘del‘ id=‘" + model.cid + "‘>删除</button></li>");
            },
            //当collection触发了remove事件
            delOne : function(model) {
                //使用jquery的remove方法,删除dom和解除绑定的事件
                $(‘#‘ + model.cid).parent().remove();
            },
            //清空数据
            clear : function(){
                this.collection.reset();
                this.clearAll();
            },
            //清空dom
            clearAll : function(){
                $(‘#list‘).empty();
            }
        });
    
        //实例化
        var peoples = new Peoples;
        var app = new View({
            collection : peoples
        });
    
    })(); 
    </script>
</html>
bubuko.com,布布扣

通过helloworld来认识下backbone,布布扣,bubuko.com

通过helloworld来认识下backbone

原文:http://www.cnblogs.com/linjiqin/p/3586342.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!