- From: Garrett Smith <dhtmlkitchen@gmail.com>
- Date: Sat, 15 Aug 2009 09:19:48 -0700
- To: Jonas Sicking <jonas@sicking.cc>
- Cc: Webapps WG <public-webapps@w3.org>
On Tue, Aug 11, 2009 at 7:20 PM, Jonas Sicking<jonas@sicking.cc> wrote: > Here is an alternative proposal for an API for reading files: > [snip proposal] > > As stated, I'm not convinced that this is a better solution than what > the spec currently does. The only advantage I can see is that it > supports progress events without requiring the use of XMLHttpRequest, > and the downside is that it's a significantly bigger API. Usage > examples would be: > The advantage to having the callback as an event is that it lets multiple callbacks be attached easily to the read. The File can be found in the DOM as:- var files = input.files, file = files && files[0]; That file might be gotten from two separate unrelated parts of the code. Each could a callback to that file and issue different getXXX commands to it, creating a race condition whereby one callback could get called where it was expecting the payload to have text and another callback to get called where it was expecting a payload of binary text. Instead, a separate reader can be obtained to read the file and that reader can have the callback. > Current draft: > myFile.getAsBinaryString(handler); > function handler(data, error) { > doStuffWith(data); > } > > Above API: // Is it "FileRequest" or "FileReader"? > reader = new FileReader; // The following two statements are backwards. > reader.readAsBinaryString(myFile); > reader.onload = handler; > function handler(event) { > doStuffWith(event.target.response); > } > What happens when the reader is in process of reading? var reader = new FileReader; reader.onload = handler; reader.readAsBinaryString(myFile); reader.readAsText(myFile); The callback would have to know in advance what type of read happened. So you'd want to have a different reader for each type of read. For example:- var bReader = new FileReader; bReader.onload = handler; bReader.readAsBinaryString(myFile); var tReader = new FileReader; tReader.readAsText(myFile); As you can see, the read /type/ is exclusive to the reader. "tReader" is only reading "text" and "bReader" is only reading binary. Each reader reads only one type. So doesn't a Factory seem more appropriate than a bunch of constructors? var bReader = FileReader.create(FileReader.BINARY); // (the "etc" part). bReader.onload = handler; bReader.read(myFile); > / Jonas Garrett
Received on Saturday, 15 August 2009 16:20:28 UTC