2012-12-27 13 views
5

geri anladığım kadarıyla, her dosya için ilerleme raporları bir data nesneyi geçen bir progress olay yoktur.Hangi dosya ilerleme durumunun nasıl belirlenir? <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Options" rel="noreferrer">jQuery File Upload</a> İlişkin

Dosya ve ilerleme çubuklarını kullanıcı arayüzüne add() olayı üzerinden ekliyorum ve daha sonra ilgili ilerleme çubuklarını progress() olayında güncellemek istiyorum. Sorun şu ki, onları nasıl eşleştireceğim?

Ben benzersiz bir kimlik yüzden onları eşleştirmek her dosyayı vermek gerekir, ama bir bildiğim kadarıyla gördüğünüz gibi sağlanmaz. Bunu nasıl yapmalıyız?

belki her File nesnesi için bazı JavaScript karma kodudur var mı?

Bazı kod:

$('#fileupload').fileupload({ 
    url: 'api/combox_upload.php', 
    dataType: 'json', 
    dropZone: $dropZone, 
    done: function (e, data) { 
     $.each(data.result, function(index, file) { 
      // indicate completeness 
     }); 
    }, 
    add: function(e, data) { 
     $.each(data.files, function(index, file) { 
      console.log(file); 
      $file_uploads.append($('<li>').text(file.name)); 
     }); 
     data.submit(); // start upload immediately 
    }, 
    progress: function(e, data) { 
     console.log(data); 
    } 
}); 

bence ben şöyle $.data kullanarak her dosya için benzersiz bir kimlik ekleyebilirsiniz:

var fileId = 0; 

$('#fileupload').fileupload({ 
    url: 'api/combox_upload.php', 
    dataType: 'json', 
    dropZone: $dropZone, 
    done: function (e, data) { 
     $.each(data.result, function(index, file) { 
      // indicate completeness 
     }); 
    }, 
    add: function(e, data) { 
     $.each(data.files, function(index, file) { 
      //console.log(file); 
      console.log(filename, fileId); 
      $.data(file, 'id', fileId++); 
      $file_uploads.append($('<li>').text(file.name)); 
     }); 
     data.submit(); // start upload immediately 
    }, 
    progress: function(e, data) { 
     var progress = parseInt(data.loaded/data.total * 100, 10); 
     $.each(data.files, function(index, file) { 
      console.log($.data(file,'id'), file.name, progress); 
     }); 
     //console.log(data); 
    } 
}); 

aklım karıştı parçası şu andaki ilerleme olayında sadece tek bir dosya vermemesi, size 1 dosya tutan bir dizi vermesidir ... Eğer garanti edilirse emin değilim her zaman tam olarak 1 dosya var (data.files) veya değil.

cevap

3

Aslında dosya yükleme veya ilerleme olayına bağlanma kodunuzu göndermediniz, ancak benim tahminim, fileuploadprogress işlevinin etrafında bir $.proxy sarıcı koymanız gerektiğidir.

$.proxy işlevi, işlevde hangi this belirteceğine izin verir. Sonra işlevi içinde sen data erişimi olacak ve this bağlam sağlamak mümkün olacaktır.

+0

Ama her dosya için elle 'progress' olayı bağlamaz ... hepsi otomatik olarak yapılır bu. Her dosya için farklı bir bağlam nasıl ayarlayabilirim? Bazı kod BTW gönderildi. – mpen

+0

'fileupload' widget'ının belgelerine/kaynak koduna bakarak, 'true' olarak ayarlanmış' singleFileUploads' adlı bir seçeneği vardır. Birden fazla dosya yapabilir, ancak bu değeri 'false 'olarak değiştirmediğiniz sürece' files' dizinizde yalnızca 1 öğe bulunacağından emin olmalısınız. –

+0

Oh .. Varsayılan olarak "true" olduğunu fark etmedim ... ama sorunun nasıl ele alındığından emin değilim? Sadece $ .fileupload() 'ı bir kez uygularsınız ve * bir * ilerleme olayını bağımsız olarak verirsiniz. $ .proxy ile her dosyayı farklı bir geri aramaya bağlamak zorunda kalacaksınız. – mpen

İlgili konular