Javascript 未捕获类型错误:未定义不是函数rails3/backbone/js
我刚刚开始深入研究javascript,以使项目更具响应性,我正在研究一个backbone.js示例 我在一个新的Rails 3项目中进行了复制 我运行项目并转到主页。。。。这里有一个指向/#的链接,没有其他链接。查看js控制台,我发现两个脚本有错误:application.js和backbone.jsJavascript 未捕获类型错误:未定义不是函数rails3/backbone/js,javascript,ruby-on-rails,ajax,ruby-on-rails-3,backbone.js,Javascript,Ruby On Rails,Ajax,Ruby On Rails 3,Backbone.js,我刚刚开始深入研究javascript,以使项目更具响应性,我正在研究一个backbone.js示例 我在一个新的Rails 3项目中进行了复制 我运行项目并转到主页。。。。这里有一个指向/#的链接,没有其他链接。查看js控制台,我发现两个脚本有错误:application.js和backbone.js backbone-min-0-3-3.js:8Uncaught TypeError: Cannot call method 'extend' of undefined 这个(backbone.
backbone-min-0-3-3.js:8Uncaught TypeError: Cannot call method 'extend' of undefined
这个(backbone.js)
还有这个(application.js):
作为js的新手,这并不完全有意义,而且我查到的任何东西在短期内都没有那么大的帮助
有谁能告诉我这些错误到底意味着什么,以及我如何跟进?通过比较中的资源,所有内容都会检查出来
,但我从一个新的rails 3项目(不是该repo的克隆)复制的内容并不完全有效
任何建议都值得赞赏,请记住我刚刚开始学习一些javascript
编辑:
根据建议,我加入了Jammit gem,并将其配置为服务于所有js脚本,而默认的Rails都不是。现在所有脚本都将进入浏览器(包括控制器)。不幸的是,这并不能解决最初的问题,只会在加载时产生更多的错误,这些错误来自于应用程序初始化,这在chrome js控制台中是这样的:
Uncaught TypeError: undefined is not a function
App.initapplication.js:9
(anonymous function):3000/#new:32
d.extend._Deferred.f.resolveWithjquery.min.js:16
d.d.extend.readyjquery.min.js:16
d.c.addEventListener.yjquery.min.js:16
考虑到我现在只是在抄袭,一定有一些小细节被我忽略了,这妨碍了应用程序的正常启动 听起来您没有包含包含
App.Controllers.Fffforms
声明的文件。在包含application.js之前,请确保您在代码中的某个地方包含了该文件。我认为您的应用程序中有一种绑定机制。确保所有捆绑文件中分号(;)的用法正确。遇到了相同的问题,然后我发现我没有在任何地方包含下划线.js
。所以我写了一个简单的backbone.js
文件:
/*
*= require backbone/underscore-min.js
*= require backbone/backbone-min.js
*/
并将其与主干和下划线文件一起存储在供应商/assets/javascripts
下:
vendor/assets/javascripts/
├── backbone
│ ├── backbone-min.js
│ └── underscore-min.js
└── backbone.js
我的
application.js.coffee
现在看起来像这样:
#= require backbone
#= require query
我的答案与@ream88类似,但Rails 3.1+资产管道功能负责缩小、捆绑等,因此我更喜欢使用未缩小的版本进行调试等 因此,请下载和的评论/完整版本,并将它们保存在
app/assets/javascripts
中(您也可以将它们保存在vendor/assets/javascripts
中)
区别在于您应该更新清单文件(app/assets/javascripts/application.js
)来添加require指令,如下所示
//= require jquery
//= require jquery_ujs
//= require underscore
//= require backbone
//= require_tree .
因为主干依赖于下划线,这将导致它们以正确的顺序加载,因此避免了错误。这让我觉得有点奇怪,所以我想分享一下我的发现:确保文件的行尾与服务器的文件系统匹配。在firefox控制台中,我收到了不同的错误错误错误:f未定义,错误:App.Controllers.ffforms不是构造函数。谢谢,我带来了一些以前没有的js,但还是有同样的问题。谢谢-我的愚蠢:下划线必须放在第一位。application.js和/=是否需要rails?
//= require jquery
//= require jquery_ujs
//= require underscore
//= require backbone
//= require_tree .