在Meteor 0.8中定义迭代块助手

时间:2014-03-30 21:20:47

标签: meteor spacebars

在版本0.8之前,可以使用常规Handlebars方式来定义迭代块帮助程序,例如流行的each_with_key,已定义,例如,here,如下所示:

Handlebars.registerHelper("each_with_key", function(obj, fn) {
    var context,
        buffer = "",
        key,
        keyName = fn.hash.key;

    for (key in obj) {
        if (obj.hasOwnProperty(key)) {
            context = obj[key];

            if (keyName) {
                context[keyName] = key;
            }

            buffer += fn(context);
        }
    }

    return buffer;
});

这不再适用于0.8,the migration guide也不适用 spacebars documentation为此展示了一个例子。

鉴于块助手现在被视为包含物,并且包含物需要返回模板(或null)而不是HTML,我现在对于是否以及如何甚至可能这一点都毫无头绪。

1 个答案:

答案 0 :(得分:3)

就在我即将放弃的时候,我明白了。事实上,现在比以前更容易,更漂亮。以下似乎很有效:

JS:

UI.registerHelper('addKeys', function (all) {
    return _.map(all, function(i, k) {
        return {key: k, value: i};
    });
});

HTML:

{{#each addKeys obj}}
<div>
   {{key}}: {{value}}
</div>
{{/each}}