我刚开始钻研javascript,使项目响应更快,我正在通过一个backbone.js的例子。
我已经在一个新的Rails 3项目中复制了http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/。
我运行项目并转到主页....这里有一个到/#的链接,没有别的了。查看js控制台,我在两个脚本上得到错误:application.js和backbone.js
这个(backbone.js)
backbone-min-0-3-3.js:8Uncaught TypeError: Cannot call method 'extend' of undefined
和this (application.js):
var App = {
Views: {},
Controllers: {},
Collections: {},
init: function() {
new App.Controllers.Fffforms();
**error message ---> application.js:9Uncaught TypeError: undefined is not a function**
Backbone.history.start();
}
};
作为js的新手,这并不完全有意义,我查过的东西在短期内都没有那么有帮助。
谁能告诉我这些错误究竟意味着什么,我该如何跟进?比较资源中的所有内容https://github.com/jamesyu/CloudEdit,但是我从一个新的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之前将该文件包含在代码中的某个地方。
我认为在你的应用中有一种捆绑机制。确保所有文件在所有捆绑文件中都正确使用分号(;)
我的回答与@ream88的类似,但是Rails 3.1+资产管道功能负责最小化,捆绑等,所以我更喜欢有非最小化版本可用于调试等。
所以下载注释/完整版本的backbone.js和下划线.js并保存在app/assets/javascripts
(你也可以保存在vendor/assets/javascripts
)。
app/assets/javascripts/application.js
)以添加require指令,如下所示
//= require jquery
//= require jquery_ujs
//= require underscore
//= require backbone
//= require_tree .
遇到同样的问题,然后我发现我没有在任何地方包括underscore.js
。所以我写了一个简单的backbone.js
文件:
/*
*= require backbone/underscore-min.js
*= require backbone/backbone-min.js
*/
并将其与Backbone和Underscore文件一起存储在vendor/assets/javascripts
下:
vendor/assets/javascripts/
├── backbone
│ ├── backbone-min.js
│ └── underscore-min.js
└── backbone.js
我的application.js.coffee
现在看起来像这样:
#= require backbone
#= require query
这让我很困惑,所以我想我应该分享一下我的发现:确保你的文件的行结尾与你的服务器的文件系统相匹配。