1

我正在使用assemble来制作新网站的原型。

我想非常彻底地模块化我的代码,就像 Brad Frost 正在用他的模式实验室传福音一样。

例子

基本上我想有一个标题部分(模式实验室说话中的“原子”),它在英雄部分(“分子”)中使用:

标题.hbs

<h1 class="{{class}}">{{text}}</h1>


英雄.hbs

<section class="hero-unit">
    {{!-- image and stuff --}}
    <header class="hero-description">
        {{> title }}
        {{> subTitle }}
    </header>
</section>


英雄部分应该是通用的;我想从每个特定页面的 JSON 文件中传递数据。对于我的页面,我使用提供块的默认布局。例如:

默认.hbs

<!DOCTYPE html>
<html>
    <head>
        ...
    </head>
    <body>
        {{#block "hero"}}{{/block}} 
        {{#block "body"}}{{/block}}
    </body>
</html>


myPageWithHero.hbs

{{#extend "default"}}
    {{#content "hero"}}
        {{ >hero }}
    {{/content}}
    {{#content "body"}}
        {{!-- myPageContent --}}
    {{/content}}
{{/extend}}


现在我想通过我拥有的 myPageWithHero.json 文件在英雄部分内部的标题部分中设置 {{text}} 。这有可能吗?或者我的方法(我在这个非常简单的例子中已经描述过)完全错了?

为任何指针干杯!:-)

4

1 回答 1

0

@polarbirke 因为您想使用来自 的数据,所以在渲染时myPageWithHero.json该数据将在对象上可用,因此您可以将该对象传递给部分。这将为该部分设置上下文,并且部分将继承该上下文:pagemyPageWithHero.hbsherotitle

{{#extend "base"}}
  {{#content "hero"}}
    {{> hero page}}
  {{/content}}
  {{#content "body"}}
    {{!-- myPageContent --}}
  {{/content}}
{{/extend}}

如果您的数据中有其他想要使用的对象,则可以改为传递它:

数据.json

{
  "title1": {
    "class": "success",
    "text": "Good Title"
  },
  "title2": {
    "class": "error",
    "text": "Bad Title"
  }
}

myPageWithHero.hbs

{{#extend "base"}}
  {{#content "hero"}}
    {{> hero title1}}
  {{/content}}
  {{#content "body"}}
    {{!-- myPageContent --}}
  {{/content}}
{{/extend}}

我希望这会有所帮助,如果您有任何问题,请告诉我。

于 2014-05-09T21:04:04.713 回答