【问题标题】:Creating complex data models in yaml front matter in Assemble在 Assemble 的 yaml 前端创建复杂的数据模型
【发布时间】:2015-03-06 09:55:41
【问题描述】:

Assemble front matter YAML 支持在 Handlebar 页面顶部使用此语法创建动态数据模型

 ---
 myModel : { aFile : <%= fileName %>}
 ---

<div>
 {{myModel.aFile.someProperty}}
</div>

其中 fileName 是一些 json 文件。是否可以在 YAML 中操作 myModel,在创建它之后,在它传递给渲染之前。这段代码不起作用,但我想做类似的事情:

 ---
 myModel : { aFile : <%= fileName %>}
 myModel
    aFile
      someProperty : I was set in header 
 ---

如果做不到这一点,如何在标头中动态生成数据?我可以调用一个自定义助手并将其输出传递给一个变量吗,这再次不起作用,但假设是:

 ---
 myModel : { data: <%= someHelper('fileName') %> }
 ---

【问题讨论】:

  • 您是从{ aFile : &lt;%= fileName %&gt;} 的文件中加载数据,还是引用Assemble config data option 加载的数据?
  • 目前是后者。是否可以从 yaml 前端调用文件加载?

标签: javascript handlebars.js assemble


【解决方案1】:

您当然可以使用自定义的 Handlebars 助手来完成此操作,该助手可以根据需要格式化数据。

Gruntfile.js

assemble: {
    mySite: {
        options: {
            helpers: ['source/helpers/**/*.js']

source/helpers/importJSON.js

(function() {
    "use strict";

    var _ = require("lodash");
    var fs = require("fs");

    module.exports.register = function(Handlebars, options) {
        Handlebars.registerHelper("importJSON", function(fileSpec, options) {
            var customData = JSON.parse(fs.readFileSync(fileSpec, "utf8"));

            // Do anything to your data here
            if (customData.color === "blue") {
                customData.color = "yellow";
            }

            _.extend(this, customData);
            return "";
        });
    };

}).call(this);

source/templates/somePage.hbs

---
{{importJSON "./source/data/favorite.json"}}
{{log color}}
<html>
<body>
    <h1>Some Page</h1>
</body>
</html>

【讨论】:

  • 感谢 James,它巧妙地解决了这个问题,另外还有在部分工作的额外好处 - 试图让部分 YAML 以这种方式工作时遇到了一些障碍。额外的问题:你知道是否可以从 YAML 调用助手?我没有在任何地方看到示例,所以我开始假设它不是。
  • 我不知道如何从 YAML lodash 模板调用部分或其他自定义代码。模板似乎可以访问站点数据模型,但结果可能仅限于字符串。 Assemble YAML docs 中的示例相当简单。
猜你喜欢
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多