在项目中使用预编译handlebars模板

如果对js模板不是很清楚的同学可以参考: 推荐五款流行的JavaScript模板引擎

下边切入正文: handlebars官网

我们这里假设你已经使用grunt完成了你的web项目的开发流程自动化。

关于为什么需要做javascript模板的预编译? 可以参考1 可以参考2

下边来说一下具体的操作步骤:

  • 在script目录下新建目录template,内置两个目录handlebars/handlebars-generated

  • handlebars,比如:noresult-tips.hsb

  • handlebars-generated 目录内存放自动编译handlebars生成的 client js template 文件。

  • 配置grunt handlebars

    • 安装grunt-contrib-handlebars,github访问地址
    • 修改grunt配置文件

        handlebars: {
            compile: {
                options: {
                    namespace: 'JST',
                    processName: function(fielPath) {
                        return filePath.match(/^app\/scripts\/public\/template\/handlebars\/(.*)\.hbs$/)[1];
                    }
                },
                files: {
                    "<%= yeoman.app %>/scripts/public/template/handlebars-generated/noresult-tips.js" : '<%= yeoman.app %>/scripts/public/template/handlebars/noresult-tips.hbs'
                }
      
            }
      
        }
      

      说一下几个参数各自的含义:

      • namespace: 将handlebars模板编译成client-side使用的js模板函数的window下的命名空间

      • processName: 生成的预编译模板对象的索引key

  • 在js文件中如何使用:
    • 首先需要引入handlebars的运行时文件,下载地址

            <script src="scripts/public/template/handlebars/handlebars.runtime-v1.3.0.js"></script>
      
    • 使用handlebars有时候我们需要自定义一些helper,具体参见handlebars的官网,所以我们单独新建一个helper js文件

            <script src="scripts/public/template/handlebars/handlebars.helper.js"></script>
      
    • 引入通过grunt-contrib-handlebars生成的js模板文件

            <script src="scripts/public/template/handlebars/handlebars.runtime-v1.3.0.js"></script>
            <script src="scripts/public/template/handlebars/handlebars.helper.js"></script>
            <script src="scripts/public/template/handlebars-generated/noresult-tips.js"></script>
      
    • 在逻辑js中的调用方法是:

            <script src="scripts/public/template/handlebars/handlebars.runtime-v1.3.0.js"></script>
            <script src="scripts/public/template/handlebars/handlebars.helper.js"></script>
            <script src="scripts/public/template/handlebars-generated/noresult-tips.js"></script>
            <script src="scripts/logic.js"></script>
      

      在logic.js 里边的调用:

            renderHtml = window.JST["noresult-tips"]({
                // 这里传入用于渲染模板的data数据模型
            });
            document.getElementById("result-sec").innerHTML = renderHtml
      
  • 模板文件中如何访问上一级参数, resultList 和 PLATFORM 为同级参数, 使用each 进入了resultList各个子项, 需要使用 ../ 返回上一级

      ```html
        
          <li class="result-list-item"
              data-open-official-account=""
    
                
              data-report-id="11627"
                
                
              data-report-id="11636"
                
          >
          </li>
        
      ```