backbone js 入门二

为什么分这么篇,因为我知道有一部分人像我这样,长篇的看不下去啊

三:collection  -----------collection 就是model的集合

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>backbone -collection</title>
</head>
<body>
    <script src="http://the5fireblog.b0.upaiyun.com/staticfile/jquery-1.10.2.js"></script>
    <script src="http://the5fireblog.b0.upaiyun.com/staticfile/underscore.js"></script>
    <script src="http://the5fireblog.b0.upaiyun.com/staticfile/backbone.js"></script>
    <script>
    (function($){
        var Book = Backbone.Model.extend({
            defaluts:{
                name:"default",
                page:"100",
            }
        });

        var BookShelf = Backbone.Collection.extend({
            //model属性指定模型类
            model:Book,
            //也可以是构造函数重写这个属性,返回一个模型
            /*model: function(attrs, options) {
                if (condition) {
                    return new PublicDocument(attrs, options);
                } else {
                    return new PrivateDocument(attrs, options);
                }
            }*/
        });

        //实例Book
        var book1 = new Book({name:"book1",page:300});
        var book2 = new Book({name:"book2",page:800});
        var book3 = new Book({name:"book3",page:1000});

        var bookshelf = new BookShelf;
        //集合可以监听add remove等事件从服务器更新,能够使用underscore.js的方法
        //集合中的模型触发的任何事件都可以在集合身上直接触发,所以我们可以监听集合中模型的变化
        bookshelf.add(book1);
        bookshelf.add(book2);
        bookshelf.add([{name:"book3",page:1000}]); //两种add添加model方式

        bookshelf.each(function(a){
            alert(a.get("name"));
        })

        //删除model
        bookshelf.remove(book2);
        bookshelf.each(function(book){
            alert(book.get("page"));
        })

        alert(bookshelf.length); //获取集合长度

        //还有很多方法,shift unshift push pop  sclie  查看underscore.js

        //fetch() and parse()没有测试。
    })(jQuery)
    </script>
</body>
</html>

四:router 路由,之前都是url链接的方式,用router函数控制url指向哪个函数。通过锚点 hash(#page)方式完成

  创建完所以得路由,需要调用Backbone.history.start() 或者 Backbone.history.start({pushState:true})

  (看着例子操作了,感觉还不是很懂)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>backbone-router</title>
</head>
<body>
    <a href="#testjjjjj">  这是测试  </a>
    <a href="#testxxx">  这是测试  </a>
    <a href="#/posts/203">  这是测试  </a>
<br/>

     <a href="#/default/">default</a>
     <br/>
    <a href="#/posts/120">Post 120</a>
    <br/>
    <a href="#/download/user/images/hey.gif">download gif</a>
    <br/>
    <a href="#/dashboard/graph">Load Route/Action View</a>
    <br/>
    <a href="#/LIULIN/HAHA">LIUILN Route/HAHA View</a>
    <br/>
    <a href="#/manual">Manual</a>
    <br/>
    <a href="#/help/test">HELP</a><a href="#/help/1222">HELPsss</a>

    <script src="http://the5fireblog.b0.upaiyun.com/staticfile/jquery-1.10.2.js"></script>
    <script src="http://the5fireblog.b0.upaiyun.com/staticfile/underscore.js"></script>
    <script src="http://the5fireblog.b0.upaiyun.com/staticfile/backbone.js"></script>
    <script>
    (function($){
        var Router = Backbone.Router.extend({
            routes:{
            //当浏览器后退按钮,或是输入URL,如果匹配一个路由,此时会触发基于动作名称的event,其他对象可以监听这个路由并接受到通知

                "posts/:id" :         "getPost",
                //下面对应的链接为<a href="#/download/user/images/hey.gif">download gif</a>
                "download/*path":     "downloadFile",
                //下面对应的链接为<a href="#/dashboard/graph">Load Route/Action View</a>
                ":route/:action":     "loadView",
                "manual":         "manual",
                "help/:id":         "help",
                //*匹配所以的url,放到最后
                "*test":         "testRoutes",

            },

            testRoutes:function(test){
                alert(test);
            },
            getPost:function(id){
                alert(id);
            },
            loadView: function( route, action ){
                    alert(route + "_" + action); // dashboard_graph
            },
            downloadFile:function(path){
                alert(path);
            },
             manual: function() {
                        alert("call manual");
                        app_router.navigate("/posts/" + 404, {trigger: true, replace: true});
                   },
                   help: function(page) {
               alert(page);
            },

        });

        var app_router = new Router;

        Backbone.history.start();

    })(jQuery)
    </script>
</body>
</html>

五 view 把model的数据显示到页面,同时也监听DOM上的事件作出相应

<!DOCTYPE html>
<html>
    <head>
        <title>backbone-view</title>
    </head>
    <body>
        <div id="search_container"></div>

        <script type="text/template" id="search_template">
            <label><%= search_label %></label>
            <label><%= search_label2 %></label>
            <input type="text" id="search_input" />
            <input type="button" id="search_button" value="Search" />
        </script>
        <script src="http://the5fireblog.b0.upaiyun.com/staticfile/jquery-1.10.2.js"></script>
        <script src="http://the5fireblog.b0.upaiyun.com/staticfile/underscore-min.1.8.2.js"></script>
        <script src="http://the5fireblog.b0.upaiyun.com/staticfile/backbone.js"></script>
        <script>
            (function ($) {
                var SearchView = Backbone.View.extend({
                    initialize:function(){
                        //alert("view");
                    },

                    //template _.template将js模板编译为可以用于页面呈现的函数,<%=   %>-插入变量,<% %>执行js代码
                    //Render  view主要目的是渲染数据,重写render方法来显示元素(el属性引起的)的模型属性
                    //render 绑定到模型的变更事件中 例子:
                    /*App.Views.Team = Backbone.View.extend({
                        model : new App.Models.Team,
                        initialize : function() {
                            this.model.bind("change", this.render, this);
                        }
                    })*/
                    render:function(context){
                        //用underscore编译模板
                        var template = _.template($("#search_template").html());
                        //加载模板到对应的el属性中
                        $(this.el).html(template(context));
                    },

                    //可以使用event绑定事件,event进行事件绑定会在el标签内定义的那一部分dome节点
                    events:{
                        "click  input[type=button]":"dosearch",
                        //其实就是$("input [type=button]").bind("click",dosearch);
                    },
                    dosearch:function(event){
                        alert($("#search_input").val());
                    }

                });
                //el 属性,每个Backbone的view都有这个属性,如果没有显示,默认为空的div,可以在定义的view的时候声明,也可以在实例的时候通过参数传递。$el  是对view的缓存。
                var searchView = new SearchView({el:$("#search_container")});
                searchView.render({search_label:" 搜索",search_label2:"ceshi"});
                //在模板中定义的变量必须在render的时候传递进去,否则报错
            })(jQuery);
        </script>
    </body>
</html>
时间: 2024-11-09 00:20:08

backbone js 入门二的相关文章

Backbone.js入门学习笔记目录

//来自 https://www.the5fire.com/backbone-tutorials-catalogue.html 1.初识backbone.js 2.通过helloworld来认识下backbone 3.backbone中的model实例 4.backbone的collection实例 5.backbone中的Router实例 6.backbone中的view实例 7.backbone实例todos分析(一) 8.backbone实例todos分析(二)view的应用 9.back

BackBone.js入门教程

废话不说,直入正题. Backbone.js是什么 Backbone.js提供了一套web开发框架,通过Models进行key-value绑定及自定义事件处理,通过Collections提供一套丰富的API用于枚举功能,通过Views来进行事件处理及现有的Application通过RESTful JSON接口进行交互,它是基于jQuery和underscore的一个前端js框架. Backbone中的重要概念 Model:根据现实数据建立的抽象,比如people Collection:比如一群人

Backbone.js入门教程第二版笔记(1)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <script src="jquery-1.9.1.js"></script> <script src="underscore.js"></script> <script

Backbone.js入门教程第二版笔记(3)

视图渲染 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <script src="jquery-1.9.1.js"></script> <script src="underscore.js"></script> <s

Backbone.js入门教程第二版笔记(2)

关于手动触发router,之前看到的例子都是通过在url后面加上#xxx或者点击一个a链接方法来触发, 还有一种情况是通过触发一种规则,来触发另一种规则(表述无能),比如这个例子中,我在url后面加上#manual,url的地址就转变为xxxx/route/n ,这里由于只给navigate传了一个参数,url改变之后并没有触发getId事件. var AppRouter=Backbone.Router.extend({ routes:{ "route/:id":"getId

three.js - (入门二)

上一章节讲了如何完整的创建一个three.js的简单例子,这一节,分别细说每个必要元素的类别及功能. 讲在前面的话:这一节主要是细说类别.那么我希望大家多去尝试每个功能,就像刚买了新手机一样,每个新鲜的功能都去试一下, 这样自己才能深刻得体会到,这个代码原来是这个效果,这个功能原来是这个代码实现的.让我们进入正题: 1.renderer(渲染器),用法及参数如下: renderer=new THREE.WebGLRenderer({ antialias:true,//antialias:true

Backbone.js学习之二

经历一段自我修炼,终于领悟到Backbone.js的关键知识点,也发现了原来MVC可以在前端这样梦幻的发挥,Backbone.js确实是一个很有魅力的前端MVC框架. 练就一门技术,需要有扎实的功底,从这点,开始认真研究Backbone.js的一些最基本的操作,以便我日后学习能更上一层楼.那就切入主题: 什么是mvc? 简单的理解就是:模型(models),视图(views),控制器(collections).通过视图把浏览器的网址传给控制器,控制器对网址进行解析,然后去模型层获取数据,模型层将

【转】Backbone.js学习笔记(二)细说MVC

文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Backbone源码结构 1: (function() { 2: Backbone.Events // 自定义事件 3: Backbone.Model // 模型构造函数和原型扩展 4: Backbone.Collection // 集合构造函数和原型扩展 5: Backbone.Router // 路由

Node.js入门:模块机制

CommonJS规范  早在Netscape诞生不久后,JavaScript就一直在探索本地编程的路,Rhino是其代表产物.无奈那时服务端JavaScript走的路均是参考众多服务器端语言来实现的,在这样的背景之下,一没有特色,二没有实用价值.但是随着JavaScript在前端的应用越来越广泛,以及服务端JavaScript的推动,JavaScript现有的规范十分薄弱,不利于JavaScript大规模的应用.那些以JavaScript为宿主语言的环境中,只有本身的基础原生对象和类型,更多的对