handlebars预编译模板报错


我用的是grunt-contrib-handlebars工具来做的编译。
具体步骤参考: http://danburzo.ro/grunt/chapters/handlebars/

编译文件成功了,页面引入:


 <script type="text/javascript" src="js/libs/handlebars.runtime.js"></script>
<script type="text/javascript" src="js/template/dist/test.js"></script>

如果是1.3版本的runtime js 就不会报错。但是,1.8以上的(以下的我没看)就会报错,错误如下:
Uncaught Error: Unknown template object: function
指向代码:


 if (!templateSpec || !templateSpec.main) {
   throw new Exception('Unknown template object: ' + typeof templateSpec);
}

差异在于1.3没做AMD或者CMD的模块包裹处理,但是1.8以上的做了该处理。
不知道如何解决此问题。

grunt JavaScript

Austar 10 years, 2 months ago

这个问题和旧版本生成的缓存有关,不过我不知道你在什么样的项目里使用 Handlebars,所以很难给出具体的解决步骤,你能说一下你的项目环境吗?

另外,你可以试一下脱离当前项目环境,也不用 grunt,只用 handlebars 做一个小的例子(可以用你出现问题的模版代码)看看能不能解决这个错误。不用 grunt 的方法请见: http://handlebarsjs.com/precompilation.html

更新 :刚确认了一下,grunt-contrib-handlebars 目前只支持 ~1.3.0 版本的 handlebars 编译的模版,因此你换了更高版本的 runtime 是不行的。如果坚持要用 grunt,那就把 runtime 降回来,否则就不要用 grunt-contrib-handlebars 插件了,你可以编写 task 直接使用高版本的 handlebars 来编译模版。

Geburah answered 10 years, 2 months ago

Your Answer