Handlebars.js: Erreur d'analyse avec chaque assistant : "ID" attendu, non défini

Créé le 29 juin 2012  ·  6Commentaires  ·  Source: handlebars-lang/handlebars.js

J'obtiens l'erreur suivante en essayant l'exemple dans la documentation :

Erreur non détectée : erreur d'analyse à la ligne 3 :
{{ #Chaque personne }} -------^
En attente de « ID », obtenu « non défini »

feature

Commentaire le plus utile

OK, le problème est assez simple en fait, pas lié aux caractères non imprimables, mais mon moteur de création de modèles côté serveur a mis un espace avant }}.
Ce qui suit résout le problème, même si je ne sais pas si le guidon doit être corrigé pour analyser correctement {# chaque personne }}.

      source = $("#people-in-clients-template").html();
      source = source.replace(/ }}/g, "}}");
      source = source.replace(/{{ /g, "{{");

Tous les 6 commentaires

@ustun , vous devrez nous montrer un peu plus de code avant que nous puissions vraiment déboguer cela correctement. Ce serait très utile si vous pouviez créer un jsfiddle pour cela.

@wagenet Merci pour la réponse rapide. Le problème est que je ne peux même pas le démontrer, car c'est le même que le simple exemple #each sur la page principale. Si je l'essaye dans jsfiddle, ou même sur la console Chrome, en saisissant le texte, cela fonctionne, mais pour une raison quelconque, le texte renvoyé par html() échoue. Je me demande s'il est en quelque sorte confus par les nouvelles lignes.

Voici la session console. Comme vous pouvez le voir, si je saisis le modèle manuellement, cela fonctionne.

template = $("#people-in-clients-template").html()
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
Error: Parse error on line 3: {{ #each people }}<li> ---^ Expecting 'ID', got 'undefined'

Essayons maintenant manuellement :

template = "{{#each people }}<li>{{ this}}</li>{{/each}}"
"{{#each people }}<li>{{ this}}</li>{{/each}}"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
"<li>foo</li><li>bar</li>"

Le rognage de la sortie html() n'a aucun effet non plus.

Donc,

  template = $.trim($("#people-in-clients-template").html())
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
Error: Parse error on line 3: {{ #each people }}<li> ---^ Expecting 'ID', got 'undefined'

Il semble qu'il y ait des données binaires dans mon modèle :

    template = "{{#each people }}<li>{{ this}}</li>{{/each}}"
"{{#each people }}<li>{{ this}}</li>{{/each}}"
/[\x00-\x1F]/.test(template)
false
template = $("#people-in-clients-template").html()
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
/[\x00-\x1F]/.test(template)
true

Voici les charcodes du modèle problématique :

a = [10, 10, 123, 123, 32, 35, 101, 97, 99, 104, 32, 112, 101, 111, 112, 108, 101, 32, 125, 125, 10, 123, 123, 32 , 116, 104, 105, 115, 32, 125, 125, 10, 123, 123, 32, 47, 101, 97, 99, 104, 32, 125, 125, 10, 10]

b="" ;

pour (i = 0; i < a.length; i++) {
b += String.fromCharCode(a[i]);
}

t = modèle({"personnes : ['foo','bar']});

Voici le jsfiddle :

http://jsfiddle.net/8nugY/

OK, le problème est assez simple en fait, pas lié aux caractères non imprimables, mais mon moteur de création de modèles côté serveur a mis un espace avant }}.
Ce qui suit résout le problème, même si je ne sais pas si le guidon doit être corrigé pour analyser correctement {# chaque personne }}.

      source = $("#people-in-clients-template").html();
      source = source.replace(/ }}/g, "}}");
      source = source.replace(/{{ /g, "{{");

Cela ressemble à un mauvais encodage par rapport à un bogue réel.

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