定制把手帮助下不了决心不带参数
问题描述:
我创建一个车把帮手,它采用以下形式:定制把手帮助下不了决心不带参数
define(['Handlebars'], function (Handlebars) {
Handlebars.registerHelper("myHelper", function (options) {
console.log('myHelper');
if (*condition*) {
console.log('myHelper False');
return options.inverse(this);
} else {
console.log('myHelper True');
return options.fn(this);
}
});
});
正如你所看到的,我使用require.js。我也将它用作Backbone.js应用程序的一部分。在模板中,帮助程序如下所示:
{{#myHelper}}
<!-- Some HTML -->
{{else}}
<!-- Some HTML -->
{{/myHelper}}
但是,助手总是返回false,因为它不被识别。我知道这是因为console.log永远不会被调用。我在应用程序中有其他自定义帮助器,但他们都有参数。如果我添加一个虚拟的说法,助手正常工作:
define(['Handlebars'], function (Handlebars) {
Handlebars.registerHelper("myHelper", function (dummy, options) {
console.log('myHelper');
if (*condition*) {
console.log('myHelper False');
return options.inverse(this);
} else {
console.log('myHelper True');
return options.fn(this);
}
});
});
模板:
{{#myHelper "string"}}
<!-- Some HTML -->
{{else}}
<!-- Some HTML -->
{{/myHelper}}
我使用的把手V1.0.0。这是在2.0.0中解决的问题吗?这不是阻碍,但我显然不希望在可能的情况下使用虚拟参数。
答
这里是fiddle与你需要的帮手。使用handlebars-1.0.rc.1。也试着用handlebars-1.3.0 - 工作正常。
HTML
<script id="topLevel" type="text/x-handlebars-template">
{{#myHelper}}
it's truthy
{{else}}
it's falsy
{{/myHelper}}
</script>
JS
Handlebars.registerHelper('myHelper', function (options) {
if (true) {
console.log("It's true");
return options.fn(this);
}
console.log("It's false");
return options.inverse(this);
});
var _template = Handlebars.compile($('#topLevel').html());
$('body').append(_template());
所以可能会出现您的问题:
过时的库或您要使用助手已经登记之前。 Require.js异步加载库/文件,调用handlebars作为依赖。例如:
define(function(require){
var yourObj = function() {
require(['handlebars'], function (Handlebars) {
// use Handlebars here
});
};
return yourObj;
});
希望它的帮助。