zoukankan      html  css  js  c++  java
  • Handlebars 新手使用

    昨天抽空看了一下关于Handlebars的 基础使用, 从开始写asp.net 用视图引擎,到写web 的时候 ,都是 用AJAx  来接受并分析数据,然后用 拼接的方式,或者追加的方式来实现在  页面中的 数据展示,今天 用 Handlebars 来实现同样的事情。(关于这些,还是不太清楚,有空还是需要多看看 关于前端的知识。。)

    引用头文件

    先说基础的使用 跟用JS插件一样,都是要用到引用文件:

    <script src="Scripts/jquery-1.10.2.min.js"></script>
    <script src="Scripts/handlebars.min.js"></script>

    当然 Handlebars 的使用还是 基于jQ的语法来使用的。 也很 明了 只需要引用两个 文件。

    使用起来 也是很容易理解   我自己的理解 Handlebars 是分为了两个  一个是 模板块,一个就是 js 方法+数据源块。

    模板块

    现实 个 这个 模板块一个 ID  用来以后JQ 拿到咱们所写得模板。  看代码:

    <script id="table-template" type="text/x-handlebars-template">
        {{#each student}}
                <tr>
                    <td>{{@index}}</td>
                    <td>{{name}}</td>
                    <td>{{sex}}</td>
                    <td>{{age}}</td>
                    <td>{{{homePage}}}</td>
                </tr>
        {{/each}}
    
    </script>

    先说  {{}}  就是模板 格式 相当于 html里面的<> 一样 同样 有{{/}} , 然后就是 #each    循环的意思 ,Razor视图引擎的话 那就完全没有难度了

    其实就跟那个差不多{{}}中写的代码,其余部分 用来写

    标签 #each student 循环 获取其中的 key的值放在<tr>中

    在td中 包含的就是 JSON数据的 KEY  ,{{@index}}这个是 Handlebars js中的一个变量 用来显示 序号

    这时候 我就有个疑问当 是JSON 的是话最外层 是没有Key 的 那如何用来指这个JSON串,根据经验  this 用于这种情况, this就指当前

     填充模板块

    填充模板 , 很简单易懂  就是根据id拿到对应的 模板块,然后 获取指定的父节点 填充html

    <script type="text/javascript">
        $().ready(function () {
            var data = {
                "student": [
                    {
                        "name": "张三",
                        "sex": "0",
                        "age": 18,
                        "homePage": "<a href='javascript:void(0);'>张三的个人主页</a>"
                    },
                    {
                        "name": "李四",
                        "sex": "0",
                        "age": 20,
                        "homePage": "<a href='javascript:void(0);'>李四的个人主页</a>"
                    },
                    {
                        "name": "王五",
                        "sex": "1",
                        "age": 30,
                        "homePage": "<a href='javascript:void(0);'>王五的个人主页</a>"
                    }
            ]};
          //获取 对应的模板块
            var myTemplate = Handlebars.compile($("#table-template").html());

          //在父节点填充 模板块并 给模板块赋值 $("#tableList").html(myTemplate(data)); }); </script>

    上面这段代码 除了 模拟的data 数据之外 就剩下两句话 ,在其中 注释解释过, 然后 运行 就可以看到 自动填充的数据。   

    填充模板块内容很少 ,需要处理的还是   模板块的内容,根据 数据的结构来  用#each 循环获取其中的 值。

    当然模板块 不是只有#each ,还有  if 语句 ,不过 本人并不推荐使用,因为很难用, 可以用 另外一个东西代替:

            Handlebars.registerHelper("compare", function (name, options) {
                if (name == "李四") {
                    return options.fn(this
                    );//就代表 执行结果为True
                }
                return options.inverse(this);//代表执行结果为False
            });

    可以在 JQ 中 用 他的Helper 方法, 来声明 一个 函数, 用来实现 判断,

    可以看出有两个参数  第一个参数是需要 传入值,第二个参数 代表 该方法为块方法 就是{{#compare  参数1}}{{/compare}}  或许会有些不清晰看:

        {{#each student}}
            {{#compare name}}
                <tr>
                    <td>{{@index}}</td>
                    <td>{{name}}</td>
                    <td>{{sex}}</td>
                    <td>{{age}}</td>
                    <td>{{{homePage}}}</td>
                </tr>
               {{else}}
                    <tr> 查无此人 </tr>
            {{/compare}}
        {{/each}}

    上面就是  compare 套到模板中的方式。

    第二个参数 代表 该方法为块方法 就是{{#compare  参数1}}{{/compare}} , 

    如果去掉Options 这个参数就是  一个行内方法, {{方法名 name}}   直接返回需要的值,就能填充到该位置

    以上就是  我对 Handlebars 的 基础使用 做的总结,如果有疑问,使用方法不明确 欢迎讨论哦!

    参考网站:http://www.cnblogs.com/iyangyuan/p/3471227.html  很清晰的说明了使用方法 ,对应相对的使用情景

  • 相关阅读:
    chrome开发者工具使用方法。
    模拟window的history对象
    浏览器后退刷新(通过浏览器按钮)
    日常口语十
    日常口语九
    日常口语八
    日常口语七
    日常口语五
    日常口语五
    日常口语四
  • 原文地址:https://www.cnblogs.com/nnqwbc/p/7596706.html
Copyright © 2011-2022 走看看