Javascript 如何将车把辅助对象作为其他辅助对象的块参数提供

Javascript 如何将车把辅助对象作为其他辅助对象的块参数提供,javascript,handlebars.js,Javascript,Handlebars.js,我一直在使用Handlebars v4.1.2,并试图采用我在Ember和其他基于组件的框架中看到的模式,但我很难将注意力集中在上下文绑定和选项传递上 要点是为作者提供下拉菜单项,而不是将其注册为可在下拉菜单之外使用的助手 我想要的用法是: {{#dropdown-menu label='Menu' as |dropdown-menu-item|}} {{#dropdown-menu-item href='https://example.com'}}Example{{/dropdown-me

我一直在使用Handlebars v4.1.2,并试图采用我在Ember和其他基于组件的框架中看到的模式,但我很难将注意力集中在上下文绑定和选项传递上

要点是为作者提供
下拉菜单项
,而不是将其注册为可在
下拉菜单
之外使用的助手

我想要的用法是:

{{#dropdown-menu label='Menu' as |dropdown-menu-item|}}
  {{#dropdown-menu-item href='https://example.com'}}Example{{/dropdown-menu-item}} 
  <!-- assume that "links" is defined as Array.<{{url: string, text: string}}> -->
  {{#each links as |link|}}
    {{#dropdown-menu-item href=link.url}}{{ link.text }}{{/dropdown-menu-item}} 
  {{/each}}
{{/dropdown-menu}}
{{#下拉菜单标签='menu'作为|下拉菜单项}
{{#下拉菜单项href='https://example.com'}}示例{{/下拉菜单项}
{{{#每个链接都作为|链接}
{{{#下拉菜单项href=link.url}{{{link.text}{{{/dropdown menu item}}
{{/每个}}
{{/下拉菜单}}
以下是到目前为止我得到的信息:

const handlebar=require(“把手”);
把手.注册表帮助器('下拉菜单',功能下拉菜单(选项){
返回新把手。安全字符串(`
${options.hash.label}
${options.fn(此{
blockParams:[dropdownMenuItem]
})}
`);
})
函数下拉菜单项(选项){
返回`
`;
}

错误是传递到
下拉菜单
函数中的
选项
对象未定义

我认为您应该调用把手括号外的选项,因为它不是上下文变量,而是帮助函数的内部变量:
${options.fn(这,{blockParams:[dropdownMenuItem]})}
-->
options.fn(this,{blockParams:[dropdownMenuItem]})
这些不是把手括号,这是一个带有占位符表达式的javascript模板字符串-将表达式移到模板字符串之外不会有任何区别。