[IndexedDB] Syntax for opening a cursor
If I'm reading the current spec right (besides the "[NoInterfaceObject]" attributes that I thought Nikunj was going to remove), if I want to open a cursor, this is what I need to do: myObjectStore.openCursor(new IDBKeyRange().leftBound("key"), new IDBCursor().NEXT_NO_DUPLICATE); Note that I'm creating 2 objects which get thrown away after using the constructor and constant. This seems pretty wasteful. Jonas' proposal (which I guess Nikunj is currently in the middle of implementing?) makes things a bit better: myObjectStore.openCursor(window.indexedDB.makeLeftBoundedKeyRange("key"), new IDBCursor().NEXT_NO_DUPLICATE); or, when you have a single key that you're looking for, you can use the short hand myObjectStore.openCursor("key", new IDBCursor().PREV); But even in these examples, we're creating a needless object. I believe we could also use the prototype to grab the constant, but the syntax is still pretty verbose and horrid. Can't we do better? J
Re: [IndexedDB] Syntax for opening a cursor
On Thu, Jun 24, 2010 at 1:25 PM, Jeremy Orlow wrote: > If I'm reading the current spec right (besides the "[NoInterfaceObject]" > attributes that I thought Nikunj was going to remove), if I want to open a > cursor, this is what I need to do: > > myObjectStore.openCursor(new IDBKeyRange().leftBound("key"), new > IDBCursor().NEXT_NO_DUPLICATE); > > Note that I'm creating 2 objects which get thrown away after using the > constructor and constant. This seems pretty wasteful. > Jonas' proposal (which I guess Nikunj is currently in the middle of > implementing?) makes things a bit better: > > myObjectStore.openCursor(window.indexedDB.makeLeftBoundedKeyRange("key"), > new IDBCursor().NEXT_NO_DUPLICATE); > > or, when you have a single key that you're looking for, you can use the > short hand > > myObjectStore.openCursor("key", new IDBCursor().PREV); > > But even in these examples, we're creating a needless object. I believe we > could also use the prototype to grab the constant, but the syntax is still > pretty verbose and horrid. > Can't we do better? If we're specifying something that will get wrapped in a library to make it less horrible *on day 1* (or earlier), we're doing it wrong. All of the variants above are very, very wrong. ~TJ
Re: [IndexedDB] Syntax for opening a cursor
Hi Jeremy, I have been able to push my changes (after more Mercurial server problems) just now. I reopened 9790 because Andrei's commit made IDBCursor and IDBObjectStore constants unavailable from the global object. After all this, you should be able to do the following for your need below: myObjectStore.openCursor(IDBKeyRange.leftBound("key"), IDBCursor.NEXT_NO_DUPLICATE); Nikunj On Jun 25, 2010, at 4:25 AM, Jeremy Orlow wrote: > If I'm reading the current spec right (besides the "[NoInterfaceObject]" > attributes that I thought Nikunj was going to remove), if I want to open a > cursor, this is what I need to do: > > myObjectStore.openCursor(new IDBKeyRange().leftBound("key"), new > IDBCursor().NEXT_NO_DUPLICATE); > > Note that I'm creating 2 objects which get thrown away after using the > constructor and constant. This seems pretty wasteful. > > Jonas' proposal (which I guess Nikunj is currently in the middle of > implementing?) makes things a bit better: > > myObjectStore.openCursor(window.indexedDB.makeLeftBoundedKeyRange("key"), new > IDBCursor().NEXT_NO_DUPLICATE); > > or, when you have a single key that you're looking for, you can use the short > hand > > myObjectStore.openCursor("key", new IDBCursor().PREV); > > But even in these examples, we're creating a needless object. I believe we > could also use the prototype to grab the constant, but the syntax is still > pretty verbose and horrid. > > Can't we do better? > > J