尝试文档中的示例时出现以下错误:
未捕获的错误:第 3 行解析错误:
{{ #每个人}}
期待“ID”,得到“未定义”
@ustun ,您需要向我们展示更多代码,然后我们才能真正正确地调试它。 如果您可以为此组合一个 jsfiddle,那将是最有帮助的。
@wagenet感谢您的快速响应。 问题是,我什至无法演示它,因为它与主页上的简单 #each 示例相同。 如果我在 jsfiddle 或什至在 Chrome 控制台上尝试输入文本,它可以工作,但由于某种原因,html() 返回的文本失败。 我想知道它是否被换行符弄糊涂了。
这是控制台会话。 如您所见,如果我手动输入模板,它会起作用。
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'
现在手动尝试:
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>"
修剪 html() 输出也没有效果。
所以,
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'
我的模板中似乎有一些二进制数据:
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
这是有问题的模板的字符代码:
a = [10, 10, 123, 123, 32, 35, 101, 97, 99, 104, 32, 112, 101, 111, 112, 108, 101, 32, 125, 125, 2, 3, 3 2 , 116, 104, 105, 115, 32, 125, 125, 10, 123, 123, 32, 47, 101, 97, 99, 104, 32, 125, 125, 10, 10]
b="";
for (i = 0; i < a.length; i++) {
b += String.fromCharCode(a[i]);
}
t = template({"人:['foo','bar']});
这是jsfiddle:
好的,这个问题实际上很简单,与非打印字符无关,但是我的服务器端模板引擎在}} 之前放了一个空格。
以下解决了这个问题,但我不确定是否应该修复把手以正确解析 {# each people }}。
source = $("#people-in-clients-template").html();
source = source.replace(/ }}/g, "}}");
source = source.replace(/{{ /g, "{{");
似乎编码错误与实际错误。
最有用的评论
好的,这个问题实际上很简单,与非打印字符无关,但是我的服务器端模板引擎在}} 之前放了一个空格。
以下解决了这个问题,但我不确定是否应该修复把手以正确解析 {# each people }}。