Bla*_*ake 6 handlebars.js assemble
我正在创建一个自定义的车把助手,但是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)];
});
}
Run Code Online (Sandbox Code Playgroud)
我的.hbs文件是:
{{#each checkable}}
<div class="col-md-3 col-xs-3 icon-container"><img src="{{compimg this}}"></div>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
我的JSON文件是:
{
"desc": "blablabla",
"checkable": [
1,
1,
1,
1
]
}
Run Code Online (Sandbox Code Playgroud)
当我查看官方文档时,发现了这段代码。有人能解释到底是什么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;
});
Run Code Online (Sandbox Code Playgroud)
的车把示例each是一个块帮助器,这意味着{{#each}}和{{/each}}标记之间有更多的标记或模板语法。使用此语法时,Handlebars将options参数作为最后一个参数传递给您的帮助器。该options对象包含一个fn与已编译模板一样工作的方法... var html = options.fn(context);从块内部为您提供了呈现的模板。
该context变量是您传递到您的帮手,可以是任何数量的参数,如果你想要更多的东西。
由于您是在做内联助手而不是块助手,所以我认为您只需要更改一行...
return compImg[opts.fn(context)];
Run Code Online (Sandbox Code Playgroud)
至
return compImg[context];
Run Code Online (Sandbox Code Playgroud)