把手:将每个索引传递给嵌套表达

时间:2016-06-27 09:31:11

标签: javascript handlebars.js

有没有办法将每个索引或键传递给把手中的嵌套表达式?

    //Not working
    {{#each thumbs}}
        <img src="{{src}} data-large="{{../images.@key.src}}" alt="">
    {{/each}}
    //Working with manual passed array index
    {{#each thumbs}}
        <img src="{{src}} data-large="{{../images.2.src}}" alt="">
    {{/each}}

游乐场:https://codepen.io/anything/pen/LZxwVL

2 个答案:

答案 0 :(得分:2)

您可以使用lookup helpersubexpressions

执行此操作

查找助手可以在each循环中获取给定索引处的图像的哈希值。在该对象上,您需要lookup src属性。所以这里:

{{#each this.thumbs}}
  <p>SRC: {{src}}</p>
  <p>LARGE SRC:{{lookup (lookup ../images @index) "src"}} 
{{/each}}

您可以在modified demo中看到它。

答案 1 :(得分:0)

我创建了一个自定义辅助方法来实现这个目标:

undefined

这个辅助方法只是将成员(_index,_position)添加到传递的对象中。 (我选择在它们前面添加,以免意外覆盖现有成员。)

您可以这样使用模板:

/**
 * Iterates over an array (like the native {{each}} helper,
 * but adds to properties to each object: "_index" (a 0-based index) and "_position" (1-based index)
 */
Handlebars.registerHelper('iter', function(context, options) {
    var fn = options.fn, inverse = options.inverse;
    var ret = "";

    if(context && context.length > 0) {
        for(var i=0, j=context.length; i<j; i++) {
            ret = ret + fn(_.extend({}, context[i], { _index: i, _position: i + 1 }));
        }
    } else {
        ret = inverse(this);
    }
    return ret;
});

但是,我认为你不需要这里的_position。