未捕获的TypeError: undefined不是一个函数rails /backbone/js



我刚开始钻研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

这让我很困惑,所以我想我应该分享一下我的发现:确保你的文件的行结尾与你的服务器的文件系统相匹配。

相关内容

  • 没有找到相关文章

最新更新