Как привязать FileList к Observable в Dart Polymer?

Я пытаюсь использовать загрузку файла в сочетании с Dart & Polymer. Рассмотрим следующие файлы:

my-upload.html

<polymer-element name="my-upload">
  <template>
    <style></style>
    <input type="file" id="uploader" bind-files="{{files}}" on-change="{{uploadFiles}}" multiple>
  </template>
  <script type="application/dart" src="my-upload.dart"></script>
</polymer-element>

my-upload.dart

@CustomTag('my-upload')
class MyUpload extends PolymerElement {        
  @observable FileList files;

  MyUpload.created() : super.created();

  void uploadFiles(event, details, target) {        
    print(files);
  }
}

Оператор печати в uploadFiles всегда печатает null. Кажется, что fileList не был привязан к наблюдаемому. Есть ли способ решить эту проблему? Должен ли я использовать другой оператор, кроме файлов привязки?

Конечно, есть обходной путь, но он упускает суть, я думаю:

my-upload.dart

@CustomTag('my-upload')
class MyUpload extends PolymerElement {  
  FileUploadInputElement uploader;

  MyUpload.created() : super.created() {
    uploader = $['uploader'];    
  }

  void uploadFiles(event, details, target) {        
    print(uploader.files);
  }
}

Есть идеи?


person melmac    schedule 29.11.2013    source источник


Ответы (1)


FileList не наблюдается. С помощью аннотации @observable вы можете только наблюдать, изменились ли файлы, чтобы они указывали на другой список файлов, но не на изменения внутри списка файлов.

Я не вижу в вашем примере убедительной причины, по которой вам нужен наблюдаемый FileList. Вы хотите сделать с ним больше, чем мы видим на примере?

Вы можете упростить свой код. Я не знаю, имеет ли это смысл в вашем случае использования:

@CustomTag('my-upload')
class MyUpload extends PolymerElement {  

  void uploadFiles(event, details, target) {        
    FileUploadInputElement uploader = $['uploader'];   
    print(uploader.files);
  }
}

или даже короче

@CustomTag('my-upload')
class MyUpload extends PolymerElement {  

  void uploadFiles(event, details, target) {        
    print($['uploader'].files);
  }
}
person Günter Zöchbauer    schedule 29.11.2013