Handlebars助手函数中的options参数是什么?

9

我将创建一个定制的handlebar辅助工具,但是每当通过终端编译它时,它总是会抛出对象#<对象>没有方法'fn'

我的handlebar工具如下:

module.exports.register = function (Handlebars, opts, params)  { 
    Handlebars.registerHelper('compimg', function (context, opts)  { 
        var compImg = ["assets/img/icon-nope.png","assets/img/icon-check.png"];
        return compImg[opts.fn(context)];
    });
}

我的.hbs文件如下:

{{#each checkable}}
   <div class="col-md-3 col-xs-3 icon-container"><img src="{{compimg this}}"></div>
{{/each}}

我的JSON文件如下:
{
    "desc": "blablabla",
    "checkable": [
        1,
        1,
        1,
        1
    ]
}

当我查阅官方文档时,发现了以下代码。请有人解释一下这里的contextoptions到底是什么?

Handlebars.registerHelper('each', function(context, options) {
  var ret = "";

  for(var i=0, j=context.length; i<j; i++) {
    ret = ret + options.fn(context[i]);
  }

  return ret;
});
1个回答

10
each 的把手示例是一个块级辅助函数,这意味着在 {{#each}}{{/each}} 标记之间有更多的标记或模板语法。当您使用此语法时,Handlebars 会将一个 options 参数作为最后一个参数传递到您的帮助器中。 options 对象包含一个 fn 方法,它的工作方式就像编译模板一样... var html = options.fn(context); 从块内部给出了渲染后的模板。 context 变量是您要传递到帮助器中的内容,如果您需要更多内容,可以是任意数量的参数。
由于您正在创建内联帮助器而不是块级帮助器,因此我认为您只需要更改一行代码...
return compImg[opts.fn(context)];

return compImg[context];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接