- From: David Grogan <dgrogan@chromium.org>
- Date: Mon, 14 Feb 2011 19:36:56 -0800
- To: Jeremy Orlow <jorlow@chromium.org>
- Cc: Jonas Sicking <jonas@sicking.cc>, public-webapps@w3.org
- Message-ID: <AANLkTik5hdy2psfZSrWf7yiU4kUp=xgWE5WS1i36DubF@mail.gmail.com>
On Thu, Feb 10, 2011 at 5:58 PM, Jeremy Orlow <jorlow@chromium.org> wrote: > On Thu, Jan 27, 2011 at 5:14 PM, Jonas Sicking <jonas@sicking.cc> wrote: > >> On Wed, Jan 26, 2011 at 11:47 AM, Jeremy Orlow <jorlow@chromium.org> >> wrote: >> > What's the current thinking in terms of events that we're firing? I >> > remember we talked about this a bit, but I don't remember the conclusion >> and >> > I can't find it captured anywhere. >> > Here's a brain dump of the requirements as I remember them: >> > * Everything should have a source attribute. >> > * Everything done in the context of a transaction should have a >> transaction >> > attribute. (Probably even errors, which I believe is not the current >> case.) >> > * Only success events should have a result. >> > * Only error events should have a code and a message....or should they >> just >> > have an error attribute which holds an IDBDatabaseError object? (If >> it's >> > the former, then do we even need an interface for IDBDatabaseError to be >> > defined?) >> > * IIRC, Jonas suggested at some point that maybe there should be >> additional >> > attributes beyond just the source and/or objects should link to their >> > parents. (The latter probably makes the most sense, right? If so, I'll >> bug >> > it.) >> > Is there anything I'm missing? >> > As far as I can tell, this means we need 5 events: an IDBEvent (with >> source) >> > and then error with transaction, error without, success with, and >> success >> > without. That seems kind of ugly though. >> > Another possibility is that we could put a transaction attribute on >> IDBEvent >> > that's null when there's no transaction. And then error and success >> would >> > have their own subclasses. To me, this sounds best. >> > Thoughts? >> >> Actually, I was proposing something entirely different. >> >> IDBRequest should look like this: >> >> interface IDBRequest : EventTarget { >> > > For each, what do we do when it's not available? Throw exception? Return > undefined? Null? Particularly in the errorCode case, it's not clear to me > what the right thing to do is. > > How do IDBVersionChangeEvent and its version attribute fit in to this new model? Should we add a nullable version attribute to IDBRequest and let the function handling a blocked event check event.target.version? Could we add a version attribute just to IDBVersionChangeRequest? attribute any result; >> attribute unsigned long errorCode; >> attribute DOMObject source; >> attribute IDBTransaction transaction; >> > >> const unsigned short LOADING = 1; >> const unsigned short DONE = 2; >> readonly attribute unsigned short readyState; >> >> attribute Function onsuccess; >> attribute Function onerror; >> }; >> >> "success" and "error" events are plain Event objects, i.e. no >> indexedDB-specific properties. >> >> The advantage of this is: >> 1. Request objects are actually useful as representing the request. >> Consumers of a request can check what the readystate is and either get >> the .result or attach a event listener as appropriate. (As things >> stand now you can't really rely on .readyState. The only thing it >> tells you is if you got to the request too late or not. If you risk >> getting there too late you better rewrite your code) >> 2. Easier to implement a promises-style API on top of indexedDB. >> 3. More similar to for example XMLHttpRequest >> >> The downside is: >> 1. Have to use a bigger syntax to get to the result. "event.result" >> vs. "event.target.result". >> >> / Jonas >> > >
Received on Tuesday, 15 February 2011 22:36:17 UTC