web-dev-qa-db-fra.com

chaque boucle dans le modèle underscore.js

Je fais quelque chose de mal ici mais je ne le vois pas! Im essayant de boucler un tableau dans un modèle de soulignement. Cela ne fonctionne pas, donc il me manque quelque chose, voici mon code, mes modèles fonctionnent bien sinon, c'est juste le truc _.each qui bogue:

<script type="text/template" id="PageContent">
    <div class="col2">
        <@ _.each([0,1,2,3,4], function(i) { @>  <p><@ i @></p> <@ }); @>
    </div>    
</script>

J'ai également fait quelques paramètres de modèle comme celui-ci:

_.templateSettings = {
    interpolate: /\<\@(.+?)\@\>/gim
};
26
Joel

Étant donné que vous avez uniquement défini une expression rationnelle d'interpolation dans les paramètres de votre modèle personnalisé, le soulignement ne sait pas quand évaluer les expressions. Lorsque vous définissez des paramètres de modèle personnalisés, vous devez définir et différencier l'interpolation et l'évaluation. De la documentation de soulignement template():

Définissez une expression régulière interpolée et une expression rationnelle (facultative) pour faire correspondre les expressions qui doivent être respectivement insérées et évaluées. Si aucun regex d'évaluation n'est fourni, vos modèles seront uniquement capables d'interpoler des valeurs.

Dans un modèle standard (pas de paramètres personnalisés), la différence est l'évaluation: <% %> et interpolation de valeur: <%= %>.

Ainsi, par exemple, votre modèle ci-dessus devrait être (avec les paramètres de modèle standard):

<% _.each([0,1,2,3,4], function(i) { %>  <p><%= i %></p> <% }); %>

Si vous souhaitez continuer à utiliser des paramètres personnalisés, vous devrez également définir une expression rationnelle d'évaluation dans _.templateSettings. Sur la base de vos questions et commentaires, quelque chose comme:

   _.templateSettings = {
      interpolate: /\<\@\=(.+?)\@\>/gim,
      evaluate: /\<\@(.+?)\@\>/gim
  };

Et puis mettez à jour votre modèle pour utiliser le formulaire d'évaluation autour des blocs de code et le formulaire d'interpolation autour des valeurs, comme ceci:

<script type="text/template" id="pageContent">
    <div class="col2">
        <@ _.each([0,1,2,3,4], function(i) { @>  <p><@= i @></p> <@ }); @>
    </div>    
</script>

source: http://documentcloud.github.com/underscore/#template

65
mjtognetti