为什么可以't我把我的Handlebars称为部分内部#

Why can't I call my Handlebars partial inside #each?

本文关键字:Handlebars 内部 我的 为什么      更新时间:2024-02-18

在重构一些代码时,我遇到了这个问题:当应用使用分部的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;
}

我做了什么:

分部用于迭代列表(称为成员),以构建复选框的ul。我发现我需要列出一个列表,并将对分部的调用放在#each中,并更新了模板输入。

我有这个:

模板:

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

部分(简化):

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

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

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

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