循环遍及yeoman的子目录并组装

时间:2014-02-28 17:48:15

标签: gruntjs handlebars.js yeoman assemble grunt-assemble

我是Yeoman和Assemble的新手,我正在尝试使用子目录构建导航结构。我可以使用以下内容遍历templates / pages目录中的主页:

{{#each pages}}
   <li{{#if this.isCurrentPage}} class="active"{{/if}}>
      <a href="{{relative dest this.dest}}">{{ data.title }}</a>
   </li>
{{/each}}

当然,这并不考虑pages目录中的子目录。这就是我的Gruntfile的汇编任务:

assemble: {
  pages: {
    options: {
      flatten: true,
      assets: '<%= config.dist %>/assets/',
      layout: '<%= config.src %>/templates/layouts/default.hbs',
      data: '<%= config.src %>/data/*.{json,yml}',
      partials: '<%= config.src %>/templates/partials/*.hbs',
      plugins: ['assemble-contrib-permalinks'],
    },
    files: {
      '<%= config.dist %>/': ['<%= config.src %>/templates/pages/**/*.hbs']
    }
  }
}

我想要的是最终得到一个嵌套列表,该列表将公开子目录中的页面。在循环中有没有任何一些直接的方法,或者我需要考虑硬编码吗?

1 个答案:

答案 0 :(得分:3)

您需要从选项中移除 flatten: true 并修改pages.files

files: [
    { expand: true, cwd: '<%= config.src %>/templates/pages', src: ['**/*.hbs'], dest: '<%= config.dist %>' }
]

由于您使用的是永久链接插件,只需添加到pages.option的末尾:

plugins: ['assemble-contrib-permalinks'],
permalinks: {
    preset: 'pretty'
},

现在,您的导航应如下所示:

{{#each pages}}
<li{{#if this.isCurrentPage}} class="active"{{/if}}>
  <a href="{{basename}}/index.html">{{ data.title }}</a>
</li>
{{/each}}