zoukankan      html  css  js  c++  java
  • Backbone.js 使用模板

    实际的应用中会使用到模板,Model 等,而模板又是进阶的基础。所以这里介绍在 View 中使用模板,以及如何向模板填充值,模板可以用字符串,或是用 <script type="text/template"> 声明的内容。使用 <%= %> 或 <%- %> 来声明变量输出的占位符。

    Backbone 的模板要用到的是 underscore.js 库, 要深入了解 Unserscore 就看官方的 Underscore.js 的文档,Underscore 的 template 方法的原型如下:

    _.template(templateString, [data], [settings])

    下面是些完整的例子

    一: 使用字符串模板

    <!DOCTYPE html>
    <html>
         <head>
             <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
             <script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
             <script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>
         </head>
         <body>
             <div id="container">Loading...</div>
         </body>
     </html>
      
     <script>
        var AppView = Backbone.View.extend({
            el: '#container',
            template: _.template("<h3>Hello <%= who %></h3>"),
            //上行可写成 template: _.template("<h3>Hello <%- who %></h3>", {who: 'World!'}), // :1
            initialize: function(options) {
                this.render();
            },
            render: function() {
                this.$el.html(this.template({who: 'World!'}));
                //前面开启的是 :1 标识的代码,这里就写成 this.$el.html(this.template);
            }
        });
     
        setTimeout(function(){
            var appView = new AppView();
        }, 1000);
    </script>

    为突出效果,把 new AppView() 放到了 setTimeout() 延迟执行,项目中没必要这么做。

    点击 http://fiddle.jshell.net/Unmi/A7MK7/ 看上面代码执行的效果,可以看到 Loading ... 在 1 秒后被替换成了 Hello World!

    另外,如果前面声明 View 时没有对 el 赋值,可以在实例化 AppView 时指定 el 属性,像下面那样使用

    new AppView({el: $("#container")})

    二. 加载模板

    可以加载页面中用 <script type="text/template"> 包含的内容作为模板,它本身不会在页面中显示 出来的。下面是用 jQuery 的选择器来定位这个模板声明,html() 取出其中的内容。完整代码如下:

    <!DOCTYPE html>
    <html>
         <head>
             <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
             <script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
             <script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>
         </head>
         <body>
             <div id="container">Loading...</div>
     
             <script type="text/template" id="who_template">
                <h3>Hello <%= who %></h3>
            </script>
         </body>
     </html>
      
     <script>
        var AppView = Backbone.View.extend({
            el: '#container',
            initialize: function(options) {
                this.render();
            },
            render: function() {
                var template = _.template($("#who_template").html());
                this.$el.html(template({who: 'Backbone!'}));
            }
        });
     
        setTimeout(function(){
            var appView = new AppView();
        }, 1000);
    </script>

    点击 http://fiddle.jshell.net/Unmi/2q6jJ/ 看执行效果,页面在一秒钟后显示 Hello Backbone!

    注意,你不能直接加载页面中声明的其他元素,例如定义的

    <div id="who_template" style="display:none">
        <h3>Hello <%= who %></h3>
    </div>

    如果直接用 _template($("#who_template").html() 的话,执行后显示的就是 Hello <%= who %>。也就是说其中的变量值不会被解析,如果你的模板中无需填充值是可以这么做,但还需用 display:none 来隐藏掉它。

    点击 http://fiddle.jshell.net/Unmi/4Rnzs/ 看看加载普通页面元素执行的效果。

    我们还能直接在自定义 View 中使用 events 属性来定义事件,接下来我们去体验。

    参考: What is a view?

  • 相关阅读:
    区块链
    黑帽内容整理
    编程语言
    编程语言
    PHP
    安全体系建设-OWASP
    burp
    编程语言-Python-GUI
    加解密
    结合自己的程序对thinkphp模板常量的理解
  • 原文地址:https://www.cnblogs.com/leejersey/p/4301001.html
Copyright © 2011-2022 走看看