0

Я пытаюсь несколько следовать this rails cast, чтобы получить jQuery-fileuploader для работы в рельсах с несущей. У меня есть несущая волна и все остальное работает отлично, но когда я пытаюсь использовать jquery-fileupload-rails, я продолжаю получать ту же ошибку: Uncaught TypeError: Object [object Object] has no method 'fileupload'. Это то же самое, когда я пытаюсь запустить $(selector).fileupload() в консоли.jQuery-fileupload-rails 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 

приложение/активы/JavaScripts/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> 

При анализе сценариев в консоли Dev:

  • Сценарий jquery-fileupload/basic.js только 5 пустым линии ... Что это должно быть? This должен быть пустым файлом, потому что все, что он содержит, - это файлы, которые включаются в конвейер активов.

  • 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'

Я бегу пакет установки, удаления, то переустановку жемчужины и перезагрузку сервера (несколько раз). После 5 часов неудачи я все начал и попробовал еще раз. Это не удалось.

UPDATE:

Если скопировать вставить весь jquery-fileupload/vendor/jquery.ui.widget.js файл в консоль затем скопировать вставить весь jquery-fileupload/jquery.fileupload.js в консоль я не получаю ошибки, перечисленные выше, и метод fileuplaod внезапно отозваны. Это не имеет для меня никакого смысла, потому что если он включен в голову в этом порядке, он должен работать в этом порядке и быть доступным, когда вызывается $(selector).fileupload().

ответ

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.

+0

'// = require_directory .'? –

+0

Должно быть '// require_tree .', нет? –

+0

@RichPeck '// = require_tree .' на самом деле то, что должно быть. Это должно быть комментарий по этому вопросу. Это остается от меня возиться, пытаясь исправить это, и я удалил линию дерева и оставил это по ошибке. Спасибо что подметил это. Возможно, это вызвало проблемы. –

Смежные вопросы