Handlebars.js: Affecter des variables dans le modèle

Créé le 29 mars 2013  ·  11Commentaires  ·  Source: handlebars-lang/handlebars.js

Est-il possible d'assigner une variable dans un modèle et de l'utiliser comme des variables de l'extérieur ?

Exemple:
Je veux sortir une table, mais 1 colonne est facultative, dépend des données (fields[].field2) existe ou non.

Dans chaque ligne, il n'y a aucun problème à vérifier, mais comment vérifier l'en-tête ?

<table>
  <thead>
    <tr>
      <th>Head 1</th>
      <th>Head 2 (optional)</th>
      <th>Head 3</th>
    </tr>
  </thead>
{{#each fields}}
  <tr>
    <td>{{{field1}}}</td>
    {{#if field2}}<td>{{{filed2}}}</td>{{/if}}
    <td>{{{field3}}}</td>
  </tr>
{{/each}}
</table>

Pour le moment, j'utilise une fonction d'assistance instable "assigner" qui crée des assistants.

{{#each fields}}
  {{#if field2}}
    {{assign "helperVar" "<th>Head 2 (optional)</th>"}}
  {{/if}}
{{/each}}

Output with: {{{helperVar}}}

Mais ce n'est pas une bonne solution et je ne peux pas l'utiliser dans #if.

Commentaire le plus utile

:+1:

@kpdecker Nous pouvons avoir des boucles, des instructions if et un certain nombre d'autres constructions logiques dans les modèles. Mais apparemment, assigner une variable est _trop_ logique dans les modèles ? Je ne comprends vraiment pas le raisonnement derrière cette décision alors que les autres assistants par défaut contiennent bien plus de logique que la simple possibilité d'attribuer une variable.

Tous les 11 commentaires

Cela va à l'encontre de la prémisse des modèles sans logique et je ne pense pas que cela devrait être une construction au niveau du langage.

Je pense que l'approche recommandée ici serait de calculer ces données dans votre logique de création de contexte et de les transmettre au modèle. Cela permet beaucoup plus de contrôle car vous avez à votre disposition le langage javascript complet plutôt que tout sous-ensemble implémenté dans le langage du modèle.

template({
  fields: fields,
  hasField2: _.any(fields, function(item) { return item.field2; })
});

Je pense que ce serait une bonne fonctionnalité, non pas pour introduire plus de logique dans le modèle, mais pour transmettre des variables spécifiques à ce modèle.

Par exemple, 2 de mes modèles utilisent le même partiel. J'aimerais pouvoir transmettre certaines variables à ce partiel à partir du niveau du modèle afin que différentes choses soient générées pour les différents modèles dans le cadre du partiel.

+1

+1

:+1:

:+1:

@kpdecker Nous pouvons avoir des boucles, des instructions if et un certain nombre d'autres constructions logiques dans les modèles. Mais apparemment, assigner une variable est _trop_ logique dans les modèles ? Je ne comprends vraiment pas le raisonnement derrière cette décision alors que les autres assistants par défaut contiennent bien plus de logique que la simple possibilité d'attribuer une variable.

+1

+1

+1

+1

Quelque chose dans ce sens peut être implémenté à l'aide de paramètres de bloc et est documenté ici :
http://handlebarsjs.com/block_helpers.html#block -params

Étant donné que cela se fait dans un espace de noms séparé en dehors du contexte actuel, cela fournit un comportement plus cohérent sur l'affectation de contexte.

Cette page vous a été utile?
0 / 5 - 0 notes