2013-03-01 86 views
2

应用程序丰富的JavaScript,包含一堆backbonejs类,jquery,bootstrap和许多库。运行rake资源预编译后,在函数中未定义

没有预编译,一切都很好。但是,当我运行rake资产时:在本地或在生产服务器上进行预编译时,会出现问题。

Uncaught TypeError: undefined is not a function     application.js:8 

application.js包含了一切(只是第一眼),所以我不知道哪里可以成为一个问题。即使我不知道从哪里开始寻找问题。 在application.js中调试输出javasript是不可能的,对吧?

任何想法?多谢你们。

回答

1

经过几个小时的调试,我发现问题出在哪里。

PostsRou​​ter是在代码中,当它被预编译,类的名称更改为“N”,这是不好的,因为在构造函数中路由器的名字,我有以下

this.constructor.toString().match(/function\s*(\w+)/) 

所以我得到错误的代码类名称,但这仍然可以。然后我这样做:

new App.Collections["" + this.class_name + "Collection"] 

这就是问题所在。 App.Collections.nCollection不存在,正确的名称是App.Collections.PostsCollection。

我通过向类定义中添加字符串字面值来解决此问题,而不是从构造函数名称解析。

祝您有美好的一天!

1

您可能会按顺序排列文件。确保您正在以正确的顺序加载所有的依赖关系。例如:下划线必须在骨干之前加载。

+0

订单看起来没问题。在开发中没有问题,并且application.js中的顺序已正确指定。 – 2013-03-01 21:06:40

+0

你能够链接到application.js第8行上的内容吗?前几行是所有需要的。 – 2013-03-01 21:24:56

+0

有骨干路由器... – 2013-03-01 21:42:37