我试图稍微关注this rails cast以使jQuery-fileuploader在带有carrierwave的rails中工作。我有carrierwave和其他所有工作都很好但是当我尝试使用jquery-fileupload-rails时,我不断收到同样的错误:Uncaught TypeError: Object [object Object] has no method 'fileupload'
。当我尝试在控制台中运行$(selector).fileupload()
时,这是相同的。
的Gemfile:
source 'http://rubygems.org'
gem 'rails', '3.2.16'
gem 'mysql2'
gem 'jquery-rails'
gem 'rest-client'
gem 'will_paginate'
gem 'simple_form'
gem 'chronic'
gem 'nokogiri'
gem 'carrierwave'
group :assets do
gem 'sass-rails'
gem 'coffee-rails'
gem 'uglifier'
gem 'jquery-fileupload-rails'
end
应用程序/资产/ Javascript角/ application.js中
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require bootstrap_ujs
//= require jquery-fileupload/basic
//= require_tree .
当我在上面有//= require jquery-fileupload
时也会发生这种情况。
我检查头部,所有脚本按正确的顺序加载:
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/vendor/jquery.ui.widget.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/jquery.iframe-transport.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/jquery.fileupload.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/basic.js?body=1" type="text/javascript"></script>
<script src="/assets/uploads.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
分析开发控制台中的脚本时:
脚本 This应该是一个空白文件,因为它包含的是文件到包含在资产管道中。 jquery-fileupload/basic.js
只有5个空行......这应该是什么?
jquery-fileupload/jquery.fileupload.js
脚本充满了各种东西,但当我将整个文件复制并粘贴到控制台并点击输入时输出:
Object function ( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); } has no method 'widget'
我正在运行bundle install,卸载然后重新安装gem并重启服务器(多次)。经过5个小时的失败后,我开始全身心地再次尝试。它失败了。
更新
如果我复制将整个jquery-fileupload/vendor/jquery.ui.widget.js
文件粘贴到控制台,则将整个jquery-fileupload/jquery.fileupload.js
复制粘贴到控制台中我没有得到上面列出的错误,并且fileuplaod方法可以突然调用。这对我来说没有意义,因为如果它按此顺序包含在头部中,它应按此顺序运行并在调用$(selector).fileupload()
时可用。
答案 0 :(得分:0)
通过我的更新,很明显可以看到资产未被正确包含。我几乎肯定当javascript文件全部放在一个大文件中时它将被解决,并且它们肯定会以正确的顺序执行,因为它们将被一起加载。我能够通过以正确的顺序手动加载脚本来解决开发环境中的问题:
jQuery ->
$.getScript "/assets/jquery-fileupload/vendor/jquery.ui.widget.js", () ->
$.getScript "/assets/jquery-fileupload/jquery.iframe-transport.js", () ->
$.getScript "/assets/jquery-fileupload/jquery.fileupload.js", () ->
$(selector).fileupload()
这是非常低效的,因为它向服务器发出三个请求,等待上一个脚本加载,然后再调用下一个脚本。这应该 NOT 在生产环境中使用。我不确定如何让application.js
构建并用于开发,但我将继续努力。一旦我可以在生产环境中测试服务器,看看它是否像我预期的那样工作,我将更新这个答案并接受它,如果还没有人有更好的答案。
我在github上开始讨论这个问题here。