在渲染之前可以"绑定"一个把手助手吗?(使用express和hbs)

Rem*_*arp 7 express handlebars.js

我有一个叫做功能的助手,看起来像这样:

hbs.registerHelper('feature', function(request, flag, options) {
  if (features(flag, request)) {
    return options.fn(this);
  } else if (options.inverse) {
    return options.inverse(this);
  }
});
Run Code Online (Sandbox Code Playgroud)

并在模板中反复使用,如下所示:

{{feature request "some-feature"}} ... {{/feature}}
Run Code Online (Sandbox Code Playgroud)

我希望能够删除request模板中的部分,因为它始终是相同的值,永远不会改变.所以,我想我可以绑定requestfeature时,它的渲染,显然,每一次变化,我不希望它蔓延到其他请求.

就像是:

res.render("page", {
  feature: hbs.helper.feature.bind(null, req)
});
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Kev*_*ker 2

如果您没有使用已知的帮助程序模式,那么帮助程序评估将检查上下文,以便您可以像上面那样传递一个绑定,它应该可以工作。

根据车把大师的最新代码,评估类似于:

helper = helpers.foo || (depth0 && depth0.foo) || helperMissing
helper.call(depth0, 1, {"name":"foo","hash":{},"data":data}
Run Code Online (Sandbox Code Playgroud)

其中深度0是当前上下文对象。这里需要注意的是,助手被赋予优先级,因此您需要以不同的方式命名它们。您还应该能够执行诸如{{./foo bar}}优先考虑本地上下文版本之类的操作,但似乎我们有一个错误,在此特定语法构造下不支持这一点。