5

Rails 3.2アプリにjQueryファイルアップロードプラグインを実装していますが、次のエラーメッセージが表示されます。

Uncaught TypeError: Cannot call method '_adjustMaxNumberOfFiles' of undefined

_adjustMaxNumberOfFilesを呼び出すコードは次のとおりです。

$(function () {
    // Initialize the jQuery File Upload widget:
    $('#fileupload').fileupload(
      {
        url: '/photos', // post to and retrieve from
        dataType: 'json'
      }
    );

    // Load existing files:
    $.getJSON($('#fileupload').prop('action'), function (files) {
      var fu = $('#fileupload').data('fileupload'), 
          files = jQuery.grep(files, function (a) { return a.gallery_id == <%= params[:id] %>; }), //filter the photos down to this gallery
          template;


      fu._adjustMaxNumberOfFiles(-files.length);
      template = fu._renderDownload(files).appendTo($('#fileupload .files'));

      // Force reflow:
      fu._reflow = fu._transition && template.length && template[0].offsetWidth;
      template.addClass('in');
      $('#loading').remove();
    });

  });

これは完全に機能していました。アプリケーションの残りの部分での作業に移り、ステージング環境にデプロイすると、上記のエラーが発生していることに気付きました。私は開発者に戻って、そこで起こっているかどうか、そして確かにそれが起こっているかどうかを確認しました。jquery-fileupload-rails gemを使用して、必要なファイルをアセットパイプラインにロードしています。gemを使用せず、すべてのアセットを手動でロードしようとしましたが、それは役に立ちません。

コンソールでfuとfu._adjustMaxNumberOfFilesを設定してこれを実行しようとすると、エラーメッセージが表示されますCannot call method '_adjustMaxNumberOfFiles' of undefined。_adjustMaxNumberOfFilesを使用してその行をコメントアウトすると、次の行でも同じエラーが発生します。代わりに、_renderDownloadが未定義であると通知されます。スクリプトがすべてロードされているにもかかわらず、jquery-file-uploadプラグインで設定されているメソッドにアクセスできないかのようです。ロードされているスクリプトは次のとおりです。ここで適用されないjsファイルは除外しました。

<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/jquery-fileupload/vendor/jquery.ui.widget.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/vendor/load-image.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/vendor/canvas-to-blob.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/vendor/tmpl.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/jquery.fileupload-fp.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/jquery.fileupload-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/locale.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-fileupload/index.js?body=1" type="text/javascript"></script>

私はこれを理解するのに本当に苦労しています。どんな助けでもいただければ幸いです。必要に応じてさらにコードスニペットを投稿できますが、投稿したのはjQueryFileUploadプラグインの一部ではない唯一のJavaScriptです。

4

2 に答える 2

5

uploads_controllerでアクションを作成します。

format.json { render json: {files: [@upload.to_jq_upload]}, status: :created, location: @upload }

あなたのjsで:

var fu = $('#fileupload').data('blueimpFileupload');
于 2013-04-02T23:44:03.493 に答える
1

jsonの戻り形式はgemによって変更されており、どこにも文書化されていません。

同じエラーに関連するこの問題を確認できます:https ://github.com/tors/jquery-fileupload-rails/issues/30

于 2013-03-07T18:44:57.107 に答える