在 Assemble 的 yaml front matter 中创建复杂的数据模型
Creating complex data models in yaml front matter in Assemble
Assemble 前端 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
---
如果做不到这一点,还可以如何在 header 中动态生成数据?我可以调用一个自定义助手并将其输出传递给一个变量吗,这再次不起作用但假设:
---
myModel : { data: <%= someHelper('fileName') %> }
---
您当然可以使用定制的 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>
Assemble 前端 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
---
如果做不到这一点,还可以如何在 header 中动态生成数据?我可以调用一个自定义助手并将其输出传递给一个变量吗,这再次不起作用但假设:
---
myModel : { data: <%= someHelper('fileName') %> }
---
您当然可以使用定制的 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>