web-dev-qa-db-fra.com

Est-il possible d'attribuer une valeur de paramètre dans les modèles de guidon sans utiliser les aides?

J'essaie d'attribuer des valeurs dans un modèle, l'idée est de faire quelque chose comme ça

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

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

Est-il possible de le faire sans registerHelper?

15
Ravit

Vous pouvez le faire avec un partiel.

partiel:

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

modèle:

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

Dans cet exemple, j'ai passé l'étendue actuelle en tant que var1. Je ne me souviens pas si l'étendue reste la même et que la nouvelle variable y est simplement ajoutée ou si vous devez la transmettre manuellement.

12
PRS

J'avais besoin de cette solution résolue de la même manière que l'affiche originale attendue. Par conséquent, j'ai créé une fonction d'assistance pour le faire pour moi.

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

Le bloc de données, contenant la racine des variables d'assistance, est contenu dans les options de l'aide.

J'ai placé ma variable dans l'objet racine, en affectant ou en écrasant avec la valeur fournie.

L'aide en HTML ressemble beaucoup à ceci.

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

<div>
  {{thisVar}}
</div>
15
The Lazy Coder

Petite mise à jour d'une réponse utile ci-dessus. Dans le guidon 4.x, semble devoir obtenir la variable de @root. 

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

Et alors,

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

{{@root.imageTag}}
2
Jeremy Chone
 {{#if author}}
       <div class='{{ classA }}'></div>
    {{else}}
        <div class='{{ classB }}'></div>
    {{/if}}

ou essayer 

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

ou peut-être cela

créer un script 

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

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

</script>
2
tire0011