jQuery文件上传无法调用未定义的方法'_adjustMaxNumberOfFiles'

时间:2013-03-07 15:43:45

标签: javascript jquery-file-upload

我正在Rails 3.2应用程序中实现jQuery File Upload插件,我收到此错误消息:

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>

我很难搞清楚这一点。任何帮助,将不胜感激。如果需要,我可以发布更多代码片段,但我发布的是唯一不属于jQuery文件上传插件的JavaScript。

2 个答案:

答案 0 :(得分:5)

在uploads_controller中创建动作:

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

在你的js中:

var fu = $('#fileupload').data('blueimpFileupload');

答案 1 :(得分:1)

json返回格式已由gem更改,并且未在任何地方记录。

您可以查看与同一错误相关的此问题:https://github.com/tors/jquery-fileupload-rails/issues/30