Более полный пример для использования с Map () - со вспомогательными функциями, взятыми из рулей, - которые позволят работать блочным переменным внутри каждого элемента управления.
function appendContextPath(contextPath, id) {
return (contextPath ? contextPath + '.' : '') + id;
}
function blockParams(params, ids) {
params.path = ids;
return params;
}
Handlebars.registerHelper('eachOfMap', function (map, options) {
let contextPath;
if (options.data && options.ids) {
contextPath = appendContextPath(options.data.contextPath, options.ids[0]) + '.';
}
let data = Handlebars.createFrame(options.data);
var out = '';
for (let [key, item] of map) {
data.key = key;
if (contextPath) {
data.contextPath = contextPath+key;
}
// out += block.fn({"key": key, "value": item});
out = out + options.fn(item, {
data: item,
blockParams: blockParams([item, key], [contextPath + key, null])
});
}
return out;
})
Использование:
let dataAsMap = new Map([["keyOne", {name: "bob", age: 99}], ["keyTwo", {name: "alice", age: 99}]]);
{{#eachOfMap (dataAsMap)}}
<li>
{{> "fragments/childTemplate"}}
</li>
{{/eachInMap}}
<span>Hey {{name}}, you're {{age}} years </span>