Pregunta jQuery File Upload No se puede llamar al método '_adjustMaxNumberOfFiles' de undefined


Estoy implementando el jQuery File Upload plugin en una aplicación Rails 3.2 y me aparece este mensaje de error:

Uncaught TypeError: Cannot call method '_adjustMaxNumberOfFiles' of undefined

Aquí está el código que llama a _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();
    });

  });

Esto estaba funcionando completamente. Pasé a trabajar en el resto de la aplicación y, al desplegar en un entorno de prueba, noté que estaba recibiendo el error anterior. Regresé a dev para ver si estaba sucediendo allí y, efectivamente, fue así. Estoy usando la gema jquery-fileupload-rails para cargar los archivos necesarios en la canalización de activos. He intentado no usar la gema y cargar todos los activos manualmente y eso no ayuda.

Intento pasar por esto en la consola, configurando fu y fu._adjustMaxNumberOfFiles, y aún aparece el mensaje de error Cannot call method '_adjustMaxNumberOfFiles' of undefined. Si hago un comentario fuera de la línea con _adjustMaxNumberOfFiles, obtengo el mismo error en la siguiente línea, y en su lugar, me dice que _renderDownload no está definido. Es como si no pudiera acceder a ninguno de los métodos establecidos en el complemento jquery-file-upload, incluso aunque todos los scripts estén cargados. Aquí están los scripts que se están cargando, en orden. He excluido los archivos js que no se aplican aquí.

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

Me está costando mucho entender esto. Cualquier ayuda sería apreciada. Puedo publicar más fragmentos de código si es necesario, pero lo que publiqué es el único JavaScript que no forma parte del complemento de carga de archivos jQuery.


5
2018-03-07 15:43


origen


Respuestas:


El formato de retorno json ha sido cambiado por la gema y no está documentado en ninguna parte.

Puede echar un vistazo a este problema que está relacionado con el mismo error: https://github.com/tors/jquery-fileupload-rails/issues/30


1
2018-03-07 18:44



En uploads_controller crear acción:

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

En tu js:

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

5
2018-04-02 23:44