【问题标题】:Accessing global variables from inside a loop with Assemble使用 Assemble 从循环内部访问全局变量
【发布时间】:2013-05-26 18:43:50
【问题描述】:

使用 Grunt.js 0.4 和 Assemble 0.3.78

如何从循环内部访问“page.filename”全局变量?

(调试)

<ul>
  {{#mysite.menu}}
    <li>{{page.filename}}</li>
  {{/mysite.menu}}
</ul>

(实际上) 建立一个菜单,试试这个:

{{#mysite.menu}}
  <li {{#is page.filename url}} class="on" {{/is}}>{{name}}</li>
{{/mysite.menu}}

其中urlname 是每个mysite.menu 的属性

【问题讨论】:

  • 这是车把相关的,不是咕噜声
  • 不正确。它与 assemble 相关,因为它指的是预定义的变量 page.filename,这是 Assemble 的一个特性——一个 Grunt.js 插件。

标签: templates handlebars.js gruntjs assemble


【解决方案1】:

提供比您提供的信息更多的信息会有所帮助,例如您正在使用的数据示例。但如果可以的话,我会尽量回答。澄清一下,pagefilename 都是 Assemble 中的内置“帮助器”/变量,filename 是几个“路径”帮助器之一,还有一些其他的:

  • dirname:返回给定文件/目录的绝对路径。将返回:path/to/variables.md。用法:{{dirname [path]}}
  • pagename:返回给定文件的全名。将返回:variables.md。用法:{{filename "docs/toc.md"}}
  • 文件名:可用作pagename 的替代。
  • basename:返回给定文件的基本名称。将返回:variables 用法:{{base "docs/toc.md"}}
  • extension:返回给定文件的扩展名。将返回:.md 用法:{{extension "docs/toc.md"}}
  • ext:可用作extension 的备用。
  • relative:返回从文件 A 到文件 B 的派生相对路径。用法:{{relative [from] [to]}}

这些可以像这样与page一起使用:

{{page.dest}}
{{page.absolute}}
{{page.dirname}}
{{page.filename}}
{{page.pagename}}
{{page.basename}}
{{page.extname}}
{{page.ext}}

或者,根据上下文和您的需要:

{{this.dest}}
{{this.dirname}}
{{this.filename}}
{{this.pagename}}
{{this.basename}}
{{this.extname}}
{{this.ext}}

当您在示例中使用 {{#each}} 块内的模板时,您需要添加 ../ 以提升上下文级别:

{{../page.dest}}
{{../page.absolute}}
{{../page.dirname}}
{{../page.filename}}
{{../page.pagename}}
{{../page.basename}}
{{../page.extname}}
{{../page.ext}}

或者,再次取决于您页面上的其他内容。 (我不知道在其余模板中进行了多少嵌套等)

{{../dest}}
{{../absolute}}
{{../dirname}}
{{../filename}}
{{../pagename}}
{{../basename}}
{{../extname}}
{{../ext}}

我的建议是,您只需将我列出的所有模板复制/粘贴到一个页面中并构建它。然后查看结果并查看哪些模板正在工作,它应该可以帮助您开始思考模板是如何工作的。 Handlebars 的上下文起初令人困惑,但希望这会有所帮助。

另外,如果您在那之后仍然遇到问题,可以查看一些“assemble-examples”存储库并尝试首先构建您的模板/页面没有任何这些帮助程序.然后提交你的工作并介绍帮助者,但不是一次只有一两个帮助者,当我学习时,我开始在一个页面中添加几十个帮助者,只是为了加快查看发生情况的过程在输出中,什么坏了,看看差异看看有什么变化。等等。

让我知道这是否至少能让你有所收获。我很乐意继续提供帮助。

【讨论】:

  • 顺便说一句,完全披露 - 如果不是很明显我在组装团队。 @Rui 我会将 Assemble 更新到 0.3.79。在您发布问题之前,我对其中一些帮助者进行了更新
  • 很好的答案乔恩,我现在可以工作了。我错过了把手上下文概念,这是新代码:
  • {{name}}
  • 太棒了!如果您需要更多帮助,请告诉我。我们在 assemble 中玩得很开心 :-)
  • 顺便说一句,对于你的
  • ,既然你有一个 URL 模板,你不想这样做(或类似的东西):
  • {{name}}
  • ,模板在href?请务必同时查看{{assets}}{{relative}}。这些会很方便
  • 我不想用我的详细代码来打扰别人。我只是将说明性代码粘贴到我想要实现的目标上。非常感谢 Jon。实际代码是:
  • {{{name }}}
  • 组装岩石,我正在使用 Grunt watch Sass 预处理和组装静态 html 构建我的网站。我将在 github 上分享它的代码,因为它将托管在 GitHub 页面上,我会让你知道 :)
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签