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

时间:2014-07-14 12:52:22

标签: handlebars.js

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

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

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

没有registerHelper可以这么做吗?

4 个答案:

答案 0 :(得分:17)

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

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

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

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

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

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

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

答案 1 :(得分:14)

您可以使用partial

执行此操作

部分:

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

模板:

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

在这个例子中,我已将当前范围作为var1传递。我不记得范围是否保持不变并且新变量刚刚添加到其中,或者您是否必须手动传递范围。

答案 2 :(得分:3)

上述答案中的小更新。在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}}

答案 3 :(得分:2)

 {{#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>