用于遍历对象数组并创建具有无限子列表的列表的把手

Handlebars to loop through array of objects and create a list with unlimited sublists

我有一个如下所示的数组:

  var menuItems = [
      {
        title: "title1",
        link: "link1",
        subMenu: [
          {
            title: "subMenu1",
            link: "subMenuLink1",
            subMenu: [
              {
                title: "subSubMenu1",
                link: "subSubLink1"
              },
              {
                title: "subSubMenu2",
                link: "subSubLink2"
              },
            ]
          },
          {
            title: "subMenu2",
            link: "subMenuLink2"
          },
        ]
      },
      {
        title: "title1",
        link: "link1"
      },
      {
        title: "title1",
        link: "link1"
      },
      {
        title: "title1",
        link: "link1"
      }
  ]

并且每个项目都可以有任意数量的子菜单。我想遍历它并在 HTML 中创建一个列表,其中包含嵌套列表以反映数据。像这样:

<ul>
  <li>
    <a href="#">title1</a>
    <ul>
      <li>
        <a href="#">subMenu1</a>
        <ul>
          <li>
            <a href="#">subSubMenu1</a>
          </li>
          <li>
            <a href="#">subSubMenu2</a>
          </li>
        </ul>
      </li>
      <li>
        <a href="#">subMenu1</a>
      </li>
    </ul>
  </li>
</ul>

我有以下内容:

  {{#each this}}
    <li>
        <a>
          {{this.title}}
        </a>
        {{#if subMenu}}
          <ul>
            {{#each subMenu}}
              <li>
                  <a>
                    {{title}}
                  </a>
              </li>
            {{/each}}
          </ul>
        {{/if}}
    </li>
  {{/each}}

但这将无法支持超过 2 个子菜单级别的任何内容。如果有人可以帮助我解决这个问题,或者指出我如何实现这一目标的正确方向。

您需要创建一个部分模板,我们称之为子菜单:

<li>
    {{this.title}}
    {{#if subMenu}}
        {{#each subMenu}}
        <ul>
            {{> submenu}}
        </ul>
        {{/each}}
    {{/if}}
</li>

然后在您的主模板中:

<ul>
{{#each this}}
    {{> submenu}}
{{/each}}
</ul>

您需要注册您的部分:

Handlebars.registerPartial('submenu', Handlebars.templates.submenu);