zoukankan      html  css  js  c++  java
  • 前端mvc框架backbone.js入门

     关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论很多了,而且各种框架之所以长久生存,通常都是有其特定优势和擅长点的。

    使用backbone.js作为前端框架的应用通常都是html和javascript分离的,也可参考requirejs的结构。

    本文介绍backbone.js的入门教程,通过本篇,读者应该能够比官方API更快和更好的理解基于backbone.js的应用。

    首先,定义一个html宿主页面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>backbone js test</title>
        <script type="text/javascript" src="jquery-1.11.1.min.js"></script>
        <script type="text/javascript" src="jsrender.js"></script>
        <script type="text/javascript" src="underscore.js"></script>
        <script type="text/javascript" src="backbone.js"></script>
        <script type="text/javascript" src="backbone_getting_start.js"></script>
    </head>
    <body>
    <a href="#!/hello">测试route</a>
    <div id="result"></div>
    <script type="text/x-jsrender" id="hello-container-template">
        <h3>{{:name}},{{:message}}</h3>
        <div id="btnClick">测试backbone单击事件</div>
    </script>
    </body>
    </html>

    其次,在专门的backbone_getting_start.js文件中定义MVC结构,如下:

    /**
     * Created by dell on 2016/11/20.
     */
    var App = {
        Models: {},
        Views: {},
        Controllers: {},
        Collections: {},
        initialize: function() {
            new App.Controllers.Routes();
            Backbone.history.start(); // 要驱动所有的Backbone程序,Backbone.history.start()是必须的。
        }
    };
    App.Models.Hello = Backbone.Model.extend({
        urlRoot: function() {
            return '/webend/api.json'; // 获得数据的后台地址,可以是函数或者属性, 随意定义一个api.json即可,见下文
        },
        initialize: function() {
            this.set({'message':'hello world'}); // 前端定义一个message字段,name字段由后端提供, 后台如果包含同样字段,会自动覆盖,否则合并。
        }
    });
    App.Views.Hello = Backbone.View.extend({
        el: "#result",  //定义结果view的容器,只要DOM元素(# . element)都可以,一般使用class或者id
        template: function() {
            return $.templates("#hello-container-template");  // 返回template,需要是函数
        },
        events: {
            "click #btnClick": "btnClick"  // 定义this.el内DOM的事件
        },
        initialize: function(options){
            this.options = options;
            this.bind('change', this.render);
            this.model = this.options.model;
        },
        render: function(){ // render方法,目标只有两个:填充this.$el,返回this以便链式操作。如果是this.el,则需要el.innerHtml
            this.$el.html(this.template().render(this.model));
            return this;
        },
        btnClick: function() {
            alert("测试backbone js events功能!");
        }
    });
    App.Controllers.Routes = Backbone.Router.extend({  //早期的版本使用Controller,当前版本已经去掉了Controller
        routes: {
            "!/hello" : "hello",//使用#!/hello驱动路由
        },
        hello : function() {
            //新建一个模型,模型向后端请求更新内容成功后根据模型渲染新页面
            var helloModel = new App.Models.Hello();
            helloModel.fetch({
                success: function(model){
                    var helloView = new App.Views.Hello({model: model.toJSON()}); //model需要调用toJSON,否则返回值放置在model.attribute
                    helloView.trigger('change');
                }
            })
        }});
    App.initialize();

    定义后台服务,以返回json的静态文件为例

    {"name":"from backend restful api","message":"return from restful api too"}

    打开backbone_getting_start.html

    点击上述链接,如下:

    点击"测试backbone单击事件",如下:

  • 相关阅读:
    第四周助教小结 北软
    第二周工作小结 北软
    第六周助教小结 北软
    第七周周小结 北软
    第八周周小结 北软
    几句话了解元数据(Metadata)
    App测试点(二)
    Pytest单元测试
    UnitTest单元测试
    【模板】单源最短路径
  • 原文地址:https://www.cnblogs.com/zhjh256/p/6083618.html
Copyright © 2011-2022 走看看