渲染前是否可以“绑定”把手辅助对象?(使用express&;hbs)

渲染前是否可以“绑定”把手辅助对象?(使用express&;hbs),express,handlebars.js,Express,Handlebars.js,我有一个名为feature的助手,如下所示: hbs.registerHelper('feature', function(request, flag, options) { if (features(flag, request)) { return options.fn(this); } else if (options.inverse) { return options.inverse(this); } }); {{feature request "some-f

我有一个名为feature的助手,如下所示:

hbs.registerHelper('feature', function(request, flag, options) {
  if (features(flag, request)) {
    return options.fn(this);
  } else if (options.inverse) {
    return options.inverse(this);
  }
});
{{feature request "some-feature"}} ... {{/feature}}
在模板中反复使用,如下所示:

hbs.registerHelper('feature', function(request, flag, options) {
  if (features(flag, request)) {
    return options.fn(this);
  } else if (options.inverse) {
    return options.inverse(this);
  }
});
{{feature request "some-feature"}} ... {{/feature}}
我希望能够删除模板中的
请求
部分,因为它总是相同的值,并且从不更改。所以我想象我可以在渲染时将
请求
绑定到
功能
,显然每次都会发生变化,我不希望它溢出到其他请求中

比如:

res.render("page", {
  feature: hbs.helper.feature.bind(null, req)
});
helper = helpers.foo || (depth0 && depth0.foo) || helperMissing
helper.call(depth0, 1, {"name":"foo","hash":{},"data":data}

这可能吗

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

根据Handlebar master的最新代码,eval类似于:

res.render("page", {
  feature: hbs.helper.feature.bind(null, req)
});
helper = helpers.foo || (depth0 && depth0.foo) || helperMissing
helper.call(depth0, 1, {"name":"foo","hash":{},"data":data}
其中,depth0是当前上下文对象。这里需要注意的是,帮助者被给予优先权,所以你需要给他们起不同的名字。您还应该能够执行类似于
{{./foo bar}}
的操作来优先考虑本地上下文的版本,但是在这个特定的语法构造下,我们似乎有一个不受尊重的地方