我必须为express中的把手集成构建一个自定义助手。帮助程序查找订阅对象,然后评估该条件。但是,模板无法在该块中呈现res.locals变量。
我不完全理解把手助手以及options.fn和options.inverse的上下文,但我假设当这些被调用时,他们正在修改该助手中可用内容的上下文。 res.locals在我的助手之前和之后继续正常工作,只是没有。
我的助手定义如下:
hbs.registerHelper('is_subscribed', (ctx,options) => {
if(ctx.subscription_level) {
return options.fn(this)
}
return options.inverse(this)
})
is_subscribed
是一个int,但即使它为0,它似乎也不适用于内置的if / else语句
我的模板使用它如下:
{{#if user}}
{{csrfToken}} // this display correctly
{{#is_subscribed user}}
<form method="POST" action="/">
<input type="hidden" id="_csrf" name="_csrf" value="{{csrfToken}}" /> // this csrfToken DOESN'T render
</form>
{{else}}
{{/is_subscribed}}
{{else}}
{{/if}}
{{csrfToken}} // This does render
csrfToken的分配方式与res.locals.csrfToken
相同,正如我所说,它在辅助函数之前和之后正确显示。
我该如何解决这个问题?
****更新**** 我已经解决了我可以传回options.data.root并且它将传回原始的整页上下文,但这似乎不正确。所以我再次想知道最好的方法是什么。