Sick. Stomach bug. But the gods, they must be appeased...
Hopefully this will be a quick one. Last night I was able to get my newly rebased mvc-sync working with localStorage—at least for reading from localStorage. It turns out that I had a bit of difficulty writing to that storage, so I hope to clean that up tonight.
Mercifully, it does turn out to be a simple problem. I think that I had copied the POST/create handler from a different branch because this was never going to work in this old, callback riddled version:
main() { HipsterSync.sync = localSync; // ... } localSync(method, model, {options}) { // ... if (method == 'post') { var collection = model.collection, attrs = model.attributes; if (attrs['id'] == null) { attrs['id'] = "${attrs['title']}:::${attrs['author']}".hashCode.toString(); } collection.create(attrs); var json = window.localStorage[collection.url], data = (json != null) ? JSON.parse(json) : {}; data[attrs['id']] = attrs; window.localStorage[collection.url] = JSON.stringify(data); } }The problem is that
collection.create()
. I am in the middle of synchronizing data between the client code and the datastore (localStorage in this case, but normally a RESTful backend). While I am in the middle of synchronizing data, I cannot call collection.create()
because that will start another synchronization event, resulting in an endless loop:Fortunately, the problem is an easy one to solve. I just need to convert that to a
collection.add()
:localSync(method, model, {options}) { // ... if (method == 'post') { // ... collection.add(attrs); var json = window.localStorage[collection.url], data = (json != null) ? JSON.parse(json) : {}; data[attrs['id']] = attrs; window.localStorage[collection.url] = JSON.stringify(data); } }With that, I can save data in localStorage while reading continues to work just fine:
I really cannot figure out where that
collection.create()
originated. Even in the most recent versions of Hipster MVC, a collection create will result in a data sync occurring. Oh well, I am not going to worry too much tonight. Instead, I take this as my cue to go back to sleep.Day #590
No comments:
Post a Comment