定制把手帮助下不了决心不带参数

问题描述:

我创建一个车把帮手,它采用以下形式:定制把手帮助下不了决心不带参数

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

希望它的帮助。