【问题标题】:Why can't I call my Handlebars partial inside #each?为什么我不能在#each 中调用我的 Handlebars 部分?
【发布时间】:2026-02-01 11:00:01
【问题描述】:

在重构一些代码时,我遇到了这个问题:当应用使用部分的 Handlebars 模板时,它抱怨 You must pass a string or Handlebars AST to Handlebars.compile. You passed function ...。函数是这样的:

function (context, options) {
  options = options || {};
  var namespace = options.partial ? options : env,
      helpers,
      partials;

  if (!options.partial) {
    helpers = options.helpers;
    partials = options.partials;
  }
  var result = templateSpec.call(
        container,
        namespace, context,
        helpers,
        partials,
        options.data);

  if (!options.partial) {
    checkRevision(container.compilerInfo);
  }

  return result;
}

我做了什么:

partial 用于遍历列表(称为成员)以构建ul 的复选框。我发现我需要制作一个列表列表并将对部分的调用放入 #each 并更新模板输入。

我有这个:

模板:

...
{{#each hierarchy.levels}}
<ul>
{{> mypartial}}
</ul>
{{/each}}

部分(简化):

{{#each members}}
<li>{{this.id}}</li>
{{/each}}

我检查了我的数据结构中的每个hierarchy.levels 都有一个members 列表。

如果我将模板中的 #each 替换为 #with hierarchy.levels.[0](例如),它可以工作,但在迭代 levels 时它将无法工作。

【问题讨论】:

    标签: javascript handlebars.js


    【解决方案1】:

    我解决了。 2 级列表之一是空的(即零项),这导致 Handlebars 将其呈现为空字符串,这再次导致 Handlebars 认为某些内容是错误的并尝试将部分呈现为常规模板。

    【讨论】:

      最近更新 更多