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

问题描述 投票:0回答:4

我正在尝试在模板内分配值,想法是做这样的事情:

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

<div class={{className}}></div>

不使用registerHelper是否可以做到这一点?

handlebars.js
4个回答
28
投票

我需要以与原始发帖人预期相同的方式解决此解决方案。因此,我创建了一个辅助函数来为我执行此操作。

function setVariable(varName, varValue, options){
  options.data.root[varName] = varValue;
};

包含在助手选项中的是数据块,以及助手变量的根。

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

html 中的助手看起来很像这样。

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

<div>
  {{thisVar}}
</div>

20
投票

您可以使用 partial 来完成此操作。

部分:

<div class="{{classname}}">{{var1.author}}</div>

模板:

{{#if author}}
{{> mypartial var1=. classname="classA"}}
{{else}}
{{> mypartial var1=. classname="classB"}}
{{/if}}

在此示例中,我将当前作用域作为 var1 传递。我不记得范围是否保持不变并且新变量只是添加到其中,或者是否必须手动传递范围。


18
投票

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

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

然后,

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

{{@root.imageTag}}

4
投票
 {{#if author}}
       <div class='{{ classA }}'></div>
    {{else}}
        <div class='{{ classB }}'></div>
    {{/if}}

或尝试

<div class='{{#if author}} {{ classA }} {{else}} {{ classB }} {{/if}}'></div>

或者也许是这个

创建脚本

<script> 
  $(function(){
       var class;
       {{#if author}}
          class = {{ classA }}
       {{else}}
          class = {{ classB }}
       {{/if}}

   var $specials = $('.special');
   $specials.removeClass('special');
   $specials.addClass(class);
  })

</script>
© www.soinside.com 2019 - 2024. All rights reserved.