9

カスタム ハンドルバー ヘルパーを作成していますがObject #<Object> has no method 'fn'、ターミナルからコンパイルすると常にスローされます。

私のハンドルバーヘルパーは次のとおりです。

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
    ]
}

公式ドキュメントを確認したところ、このコードが見つかりました。誰かが正確contextに何を説明できますかoptions?

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;
});
4

1 に答える 1

10

のハンドルバーの例はブロック ヘルパーです。つまり、とタグeachの間にさらに多くのマークアップまたはテンプレート構文があることを意味します。この構文を使用すると、Handlebars はパラメーターを最後の引数としてヘルパーに渡します。オブジェクトには、コンパイルされたテンプレートと同じように機能するメソッドが含まれています...ブロック内からレンダリングされたテンプレートを提供します。{{#each}}{{/each}}optionsoptionsfnvar html = options.fn(context);

変数は、ヘルパーに渡すものであり、さらにcontext必要な場合は任意の数の引数にすることができます。

ブロック ヘルパーではなくインライン ヘルパーを作成しているので、変更する必要があるのは 1 行だけだと思います...

return compImg[opts.fn(context)];

return compImg[context];
于 2014-07-07T13:45:06.607 に答える