3

这是我正在尝试的代码:http: //jsfiddle.net/sbrsK/10/
它运行正常,在 jsfiddle 中没有任何错误

尝试通过我的计算机上本地的网络服务器运行相同的操作不起作用。正在加载以下文件:

  • 索引.html
  • 应用程序.js

在 Firefox 中,我收到此错误:

TypeError: this._input is null @ http://cloud.github.com/downloads/wycats/handlebars.js/handlebars-1.0.0.beta.6.js:364

在铬我得到这个错误:

Uncaught TypeError:Cannot call method 'match' of null
under match = this._input.match(this.rules[rules[i]]); in handlebars-1.0.0.beta.6.js

这个链接前面有一个非常相似的问题,但似乎它仍然是开放的。

所以问题是为什么当它在 jsfiddle 中正常工作时会发生这个错误?在本地运行它的正确方法是什么?

4

1 回答 1

7

该错误意味着#entry-template当您尝试使用它时它不在 DOM 中:

var source = $("#entry-template").html(); // There is no #entry-template in the DOM here
var template = Handlebars.compile(source);

这意味着您最终尝试编译undefined为 Handlebars 模板,但这是行不通的。您可以通过运行以下命令查看错误:

http://jsfiddle.net/ambiguous/LprDR/

打开你的控制台。

jsfiddle 之所以有效,是因为在加载 DOM 之后您的所有代码都在运行,这是默认的 jsfiddle 行为。

您的真实代码中可能存在加载顺序问题,请尝试将其包装在$(function() { /*...*/ })包装器中。

于 2012-09-27T04:50:06.170 回答