2

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>

私のアップロード.dart

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

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

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

uploadFiles の print-statement は常に null を出力します。fileList がオブザーバブルにバインドされていないようです。この問題を解決する方法はありますか? bind-files 以外のステートメントを使用する必要がありますか?

もちろん、回避策はありますが、要点がずれていると思います。

私のアップロード.dart

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

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

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

何か案は?

4

1 に答える 1

0

FileListは観察できません。注釈を使用@observableすると、ファイルが別の FileList を指すように変更されているかどうかのみを観察できますが、FileList 内の変更は観察できません。

あなたの例では、監視可能な 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);
  }
}
于 2013-11-29T17:23:11.317 に答える