Handlebars.js: 每个助手解析错误:期望“ID”,未定义

创建于 2012-06-29  ·  6评论  ·  资料来源: handlebars-lang/handlebars.js

尝试文档中的示例时出现以下错误:

未捕获的错误:第 3 行解析错误:
{{ #每个人}} -------^
期待“ID”,得到“未定义”

feature

最有用的评论

好的,这个问题实际上很简单,与非打印字符无关,但是我的服务器端模板引擎在}} 之前放了一个空格。
以下解决了这个问题,但我不确定是否应该修复把手以正确解析 {# each people }}。

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

所有6条评论

@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:

http://jsfiddle.net/8nugY/

好的,这个问题实际上很简单,与非打印字符无关,但是我的服务器端模板引擎在}} 之前放了一个空格。
以下解决了这个问题,但我不确定是否应该修复把手以正确解析 {# each people }}。

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

似乎编码错误与实际错误。

此页面是否有帮助?
0 / 5 - 0 等级