2013-02-16 12 views
5

Mam aplikację Sencha Ext JS, w której do przesyłania plików używam pola formularza File (Ext.form.field.File). Działa to dobrze, ale chcę, aby użytkownicy mogli wybrać wiele plików do przesłania na raz, na przykład w witrynie Dropbox.com. Mam inny, dla Sencha witryny (w którym miałem bezpośrednią kontrolę nad HTML), gdzie I rozwiązać ten problem za pomocą multiple atrybut elementu INPUT:Jak uzyskać pole przesyłania pliku Sencha do akceptowania wielu plików

<input type="file" name="files" multiple> 

Sencha, jednak nie obsługuje wiele plików w pole przesyłania pliku natywnie, przynajmniej w wersji bieżącej (4.1). Być może istnieje możliwość zmiany wyjścia HTML emitowanego przez Sencha dla elementu <input>, ale nie jestem pewien jak.

Odpowiedz

3

Można utworzyć xtype:

Ext.define('fileupload',{ 
    extend: 'Ext.form.field.Text' 
    ,alias: 'widget.fileupload' 
    ,inputType: 'file' 
    ,listeners: { 
     render: function (me, eOpts) { 
      var el = Ext.get(me.id+'-inputEl'); 
      el.set({ 
       size: me.inputSize || 1 
      }); 
      if(me.multiple) { 
       el.set({ 
        multiple: 'multiple' 
       }); 
      } 
     } 
    } 
}); 

i używać go w formie:

,items: [{ 
     xtype: 'fileupload' 
     ,vtype: 'file' 
     ,multiple: true // multiupload (multiple attr) 
     ,acceptMimes: ['doc', 'xls', 'xlsx', 'pdf', 'zip', 'rar'] // file types 
     ,acceptSize: 2048 
     ,fieldLabel: 'File <span class="gray">(doc, xls, xlsx, pdf, zip, rar; 2 MB max)</span>' 
     ,inputSize: 76 // size attr 
     ,msgTarget: 'under' 
     ,name: 'filesToUpload[]' 
    }] 

Zobacz przykład na githab

+0

Dzięki. Ten kod wydaje się być zależny od wersji ExtJS, nie działa dla mnie z wersją 4.0.7. Element input w moim przypadku nie ma identyfikatora 'something-inputEl', więc' Ext.get (me.id + '- inputEl') zwraca 'null'. \t Wymieniłem go na 'Ext.get (me.id) .down ('input')' i to pomogło, ale następnie powoduje dalsze wyjątki w kodzie ExtJS w dół drogi. – Cozzamara

+0

@Cozzamara Tak, wszystko zrobiłeś dobrze. Tak samo musi być w walidatorze. Przykład 4.0.7: http://htmlpreview.github.com/?https://github.com/werdender/ext4examples/blob/master/fileupload407.html Jeśli sprawdzanie poprawności nie jest konieczne, po prostu nie używaj vtype. – Vlad

Powiązane problemy