是否可以在不使用助手的情况下在把手模板中分配参数值?

Rav*_*vit 23 handlebars.js

我试图在模板中分配值,想法是做这样的事情:

    {{#if author}}
        {{className = 'classA'}}  <- trying to implement this line.
    {{else}}
        {{className = 'classB'}}
    {{/if}}

<div class={{className}}></div>
Run Code Online (Sandbox Code Playgroud)

没有registerHelper可以这么做吗?

The*_*der 18

我需要以与原始海报预期相同的方式解决此解决方案.因此我创建了一个辅助函数来为我做这个.

function setVariable(varName, varValue, options){
  options.data.root[varName] = varValue;
};
Run Code Online (Sandbox Code Playgroud)

包含在帮助程序中的选项中的是数据块,其中包含辅助变量的根.

我将变量放在根对象中,使用提供的值分配或覆盖.

html中的帮助器看起来很像这样.

{{setVariable "thisVar" "Contents Here"}}

<div>
  {{thisVar}}
</div>
Run Code Online (Sandbox Code Playgroud)

  • 这怎么不从一开始就被烘焙到车把中呢? (5认同)
  • 顺便说一句,现在在 Handlebars 4.x 中,您似乎必须执行 `{{@root.thisVar}}` 并确保 `options.data.root` 是一个对象。 (2认同)
  • OP 要求能够在不注册助手的情况下执行此操作。这个答案有效,但不是所要求的。 (2认同)

PRS*_*PRS 14

你可以部分地做到这一点.

部分:

<div class="{{classname}}">{{var1.author}}</div>
Run Code Online (Sandbox Code Playgroud)

模板:

{{#if author}}
{{> mypartial var1=. classname="classA"}}
{{else}}
{{> mypartial var1=. classname="classB"}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我将当前范围作为var1传递.我不记得范围是否保持不变,只是添加了新变量,或者是否必须手动传递范围.

  • Handlbars 部分文档可以在[此处](https://handlebarsjs.com/guide/partials.html)查看。 (2认同)

Jer*_*one 7

来自上述有用答案的小更新。在Handlebars 4.x中,似乎我们必须从@root获取变量。

handlebars.registerHelper('assign', function (varName, varValue, options) {
    if (!options.data.root) {
        options.data.root = {};
    }
    options.data.root[varName] = varValue;
});
Run Code Online (Sandbox Code Playgroud)

然后,

{{assign 'imageTag' 'drop-155'}}

{{@root.imageTag}}
Run Code Online (Sandbox Code Playgroud)