【问题标题】:Upgrading to precompiled Handlebars 4.7.6 templates fails to render升级到预编译的 Handlebars 4.7.6 模板无法呈现
【发布时间】:2025-12-17 21:40:01
【问题描述】:

自从我升级到 Handlebars 4.7.6 后,我在尝试渲染我的预编译模板时遇到了错误。我将 js 运行时升级到相同的版本,但我的模板无法加载。

这是尝试渲染模板的代码:

var template = Handlebars.templates.index;
var rendered = template(data);

还有错误:TypeError: template is not a function

当我检查 4.7.3 编译模板的代码差异时,我发现旧版本处理对象创建的方式与新模板不同。在文件的开头,模板是不同的:

版本:4.7.3

!function(){var l=Handlebars.template;(Handlebars.templates=Handlebars.templates||{}).index=l({1:function(l,n,e,a,t){...

版本:4.7.6

!function(){var l=Handlebars.template;(Handlebars.templates=Handlebars.templates||{})["handlebars.index"]=l({1:function(l,n,e,a,t){...

如果我手动将 ["handlebars.index"] 更改为索引,那么我的模板会正确呈现。但是我不想每次编译新模板的时候都手动更改模板的代码。

我可以对我的代码进行更改以使其正常工作吗?

【问题讨论】:

  • 检查您使用的是最新的运行时并且!检查预编译模板的名称。我做了一个快速检查,代码与您预期的工作非常相似。如果需要,我将提供一个示例。并检查页面加载时是否有任何错误,除了车把错误
  • @Drag13 我正在使用最新版本的 4.7.6 编译器和运行时。否则没有js错误,并且名称是正确的。您的运行时是否生成 ["handlebars.index"]=l 或 .index=l ?
  • 我根本看不到这个。让我澄清一下,您是在 HTML 文件中还是在 Node.js 中使用此代码以防万一,这是我使用运行时进行测试的方式:<script src="./node_modules//handlebars//dist/handlebars.runtime.min.js"></script>
  • @Drag13 这是模板文件的javascript。
  • 请问?不明白你的意思。也许您可以提供更多代码?

标签: javascript handlebars.js


【解决方案1】:

我可以看到4.7.6版本的编译代码,你应该尝试检索index函数,如下所示。

var template = Handlebars.templates["handlebars.index"];
var rendered = template(data);

如果有帮助,请告诉我。

【讨论】: