GruntJS通过helper将Json文件解析为partial

时间:2016-07-25 11:10:31

标签: json gruntjs handlebars.js assemble

我想通过helper将json文件解析为partial。我目前正在使用本网站的技术:

Parsing Json data into partial

它工作得很好,但我想解析整个json文件:

{{#parseJSON jsonfile}}

而不是这样做:

{{#parseJSON '{"id": "firstname", "label": "First name"}'}}

#each helper通过传递Json文件

来工作
{{#each jsonfile}}
  {{> partial}}
{{/each}}

是否可以使用自定义帮助程序执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以使用自定义帮助程序执行此操作。您可以创建一个像{{#each}}帮助器一样工作的块帮助器,也可以创建一个内联帮助程序,它将返回json对象进行迭代并将其用作子表达式。

<强> data.json

{
  "brian": { "id": "brian", "label": "Brian" },
  "cataylyst": { "id": "cataylyst": "label": "The Cataylyst" }
}

阻止帮助

var path = require('path');
var fs = require('fs');
var each = Handlebars.helpers.each;
Handlebars.register('eachJSON', function(filepath, options) {
  try {
    var data = JSON.parse(fs.readFileSync(path.resolve(filepath), 'utf8'));
    return each.call(this, data, options);
  } catch (err) {
    console.error(err);
    return ''
  }
});

内联帮助

var path = require('path');
var fs = require('fs');
Handlebars.register('readJSON', function(filepath, options) {
  try {
    return JSON.parse(fs.readFileSync(path.resolve(filepath), 'utf8'));
  } catch (err) {
    console.error(err);
    return ''
  }
});

<强>使用

{{!using the block helper}}
{{#eachJSON "data.json"}}
  {{> partial this}}
{{/each}}

{{!using the inline helper with the built in each block}}
{{#each (readJSON "data.json")}}
  {{> partial this}}
{{/each}}

我更喜欢第二种方法,因为它让您可以选择在其他地方使用readJSON助手。此外,使用内置的each帮助程序可确保您获得与将each帮助程序与已在上下文中使用的对象或数组相同的功能。

希望这位助手。