Можно ли назначить значение параметра в шаблонах руля без использования помощников?

Я пытаюсь назначить значения внутри шаблона, идея состоит в том, чтобы сделать что-то вроде этого:

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

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

Можно ли сделать это без registerHelper?

Ответ 1

Вы можете сделать это с частичным.

частичный:

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

шаблон:

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

В этом примере я передал текущую область видимости как var1. Я не могу вспомнить, остается ли область действия той же самой, и новая переменная просто добавляется к ней, или если вы должны передать область действия вручную.

Ответ 2

Мне нужно, чтобы это решение решалось так же, как ожидалось исходный плакат. Поэтому я создал вспомогательную функцию, чтобы сделать это для меня.

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

Внутри опций хелпера содержится блок данных с корнем хелперных переменных.

Я поместил свою переменную в корневой объект, назначив или перезаписав его с предоставленным значением.

Помощник в html выглядит так.

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

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

Ответ 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}}

Ответ 4

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

или попробуйте

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

или, может быть, это

создать script

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

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

</script>