Sie können dies mit einem benutzerdefinierten Helfer tun. Sie können entweder einen Blockhelfer erstellen, der wie der Helper {{#each}}
funktioniert, oder Sie können einen Inline-Helper erstellen, der das Json-Objekt zum Iterieren zurückgibt und als Unterausdruck verwendet.
data.json
{
"brian": { "id": "brian", "label": "Brian" },
"cataylyst": { "id": "cataylyst": "label": "The Cataylyst" }
}
Block helper
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 ''
}
});
inline helper
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 ''
}
});
Nutzung
{{!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}}
ziehe ich den zweiten Ansatz, weil es Ihnen die Möglichkeit gibt, die readJSON
Helfer in anderen Orten zu verwenden. Die Verwendung des eingebauten each
-Helfers stellt außerdem sicher, dass Sie die gleiche Funktionalität wie mit dem each
-Helper für ein Objekt oder Array erhalten, das sich bereits im Kontext befindet.
Hoffe diese Helfer.