Recebo o seguinte erro ao tentar o exemplo nos documentos:
Erro não detectado: Erro de análise na linha 3:
{{#cada pessoas}}
Esperando 'ID', obteve 'indefinido'
@ustun , você precisará nos mostrar um pouco mais de código antes que possamos realmente depurar isso. Seria muito útil se você pudesse montar um jsfiddle para isso.
@wagenet Obrigado pela resposta rápida. O problema é que não consigo nem demonstrar, pois é o mesmo que o exemplo #cada simples na página principal. Se eu tentar no jsfiddle, ou mesmo no console do Chrome, inserindo o texto, funciona, mas por algum motivo, o texto retornado por html () falha. Estou me perguntando se de alguma forma ele está ficando confuso com as novas linhas.
Aqui está a sessão do console. Como você pode ver, se eu inserir o modelo manualmente, ele funciona.
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'
Agora tentando manualmente:
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>"
Cortar a saída html () também não tem efeito.
Então,
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'
Parece que há alguns dados binários em meu modelo:
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
Estes são os charcodes do modelo problemático:
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 = "";
para (i = 0; i <a.length; i ++) {
b + = String.fromCharCode (a [i]);
}
t = template ({"pessoas: ['foo', 'bar']});
Aqui está o jsfiddle:
OK, o problema é muito simples, na verdade, não está relacionado a caracteres não imprimíveis, mas meu mecanismo de modelagem do lado do servidor colocou um espaço antes}}.
O seguinte resolve o problema, embora eu não tenha certeza se o guiador deve ser corrigido para analisar {# cada pessoa}} corretamente.
source = $("#people-in-clients-template").html();
source = source.replace(/ }}/g, "}}");
source = source.replace(/{{ /g, "{{");
Parece uma codificação ruim versus um bug real.
Comentários muito úteis
OK, o problema é muito simples, na verdade, não está relacionado a caracteres não imprimíveis, mas meu mecanismo de modelagem do lado do servidor colocou um espaço antes}}.
O seguinte resolve o problema, embora eu não tenha certeza se o guiador deve ser corrigido para analisar {# cada pessoa}} corretamente.