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

时间:2014-02-23 18:41:39

标签: 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-feature"}} ... {{/feature}}

我希望能够移除模板中的request部分,因为它始终是相同的值并且永远不会更改。所以我想我可以在request呈现时将feature绑定到res.render("page", { feature: hbs.helper.feature.bind(null, req) }); ,显然每次都会更改,我不希望它泄露给其他请求。

类似的东西:

{{1}}

这可能吗?

1 个答案:

答案 0 :(得分:2)

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

根据把手掌握的最新代码,eval类似于:

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

其中depth0是当前上下文对象。这里需要注意的是,帮助者优先考虑,因此您需要对其进行不同的命名。您还应该能够执行类似{{./foo bar}}之类的操作,以优先考虑本地上下文的版本,但看起来我们有一个bug,在这个特定的语法结构中不会受到尊重。