From 76ae759b0b9bc0920ff5fff9289a0217be7055d0 Mon Sep 17 00:00:00 2001 From: Timo Uhlmann Date: Thu, 5 Jul 2012 10:59:48 +0200 Subject: [PATCH 1/5] Changed RouterEventList.add to implement EventListenerList --- HipsterRouter.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HipsterRouter.dart b/HipsterRouter.dart index b8ec3fb..1d42dcb 100644 --- a/HipsterRouter.dart +++ b/HipsterRouter.dart @@ -111,8 +111,8 @@ class RouterEventList implements EventListenerList { listeners = []; } - RouterEventList add(fn) { - listeners.add(fn); + RouterEventList add(EventListener handler, [bool useCapture]) { + listeners.add(handler); return this; } From e05d1ce3316eaa1a520c6da4ba6603ef351583b1 Mon Sep 17 00:00:00 2001 From: Timo Uhlmann Date: Thu, 5 Jul 2012 13:59:22 +0200 Subject: [PATCH 2/5] Added 'Accept' header with value 'application/json'. At least Ruby on Rails needs this, other servers might, too --- HipsterSync.dart | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/HipsterSync.dart b/HipsterSync.dart index 8bd464b..0d8ec78 100644 --- a/HipsterSync.dart +++ b/HipsterSync.dart @@ -43,20 +43,22 @@ class HipsterSync { verb = _methodMap.containsKey(method) ? _methodMap[method] : method; - var request = new XMLHttpRequest(), - completer = new Completer(); - + XMLHttpRequest request = new XMLHttpRequest(); + Completer completer = new Completer(); + request. on. load. add((event) { - var req = event.target; + XMLHttpRequest req = event.target; if (req.status > 299) { completer. completeException("That ain't gonna work: ${req.status}"); } else { + print("Success!"); + print(req.response); var json = JSON.parse(req.responseText); completer.complete(json); } @@ -64,6 +66,9 @@ class HipsterSync { request.open(verb, model.url, true); + // Tell the server that we expect JSON! + request.setRequestHeader("Accept", "application/json"); + // POST and PUT HTTP request bodies if necessary if (verb == 'post' || verb == 'put') { request.setRequestHeader('Content-type', 'application/json'); From d168f38f9e4278117b6cc3f3a6f1ab954a5a9a23 Mon Sep 17 00:00:00 2001 From: Timo Uhlmann Date: Thu, 5 Jul 2012 15:05:18 +0200 Subject: [PATCH 3/5] Added fetch method to HipsterModel --- HipsterModel.dart | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/HipsterModel.dart b/HipsterModel.dart index 4137cb8..5b1e9be 100644 --- a/HipsterModel.dart +++ b/HipsterModel.dart @@ -63,6 +63,26 @@ class HipsterModel implements Hashable { /// Returns true if the model has been _previously_ saved to the backend (not /// if the most recent changes have been saved). bool isSaved() => id != null; + + /// TODO + Future fetch() { + Completer completer = new Completer(); + Future after_call = HipsterSync.call('get', this); + + after_call. + then((attrs) { + this.attributes = attrs; + on.load.dispatch(new ModelEvent('load', this)); + completer.complete(this); + }); + + after_call.handleException((e) { + completer.completeException(e); + return true; + }); + + return completer.future; + } /// Either creates or updates this record in the backend datastore. This /// method returns a [Future] that can be used to perform subsequent actions From 37a73980575859230a6c6f4a835b4ce9e9a5d439 Mon Sep 17 00:00:00 2001 From: Timo Uhlmann Date: Thu, 5 Jul 2012 15:31:22 +0200 Subject: [PATCH 4/5] Revert "Added 'Accept' header with value 'application/json'. At least Ruby on Rails needs this, other servers might, too" This reverts commit e05d1ce3316eaa1a520c6da4ba6603ef351583b1. --- HipsterSync.dart | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/HipsterSync.dart b/HipsterSync.dart index 0d8ec78..8bd464b 100644 --- a/HipsterSync.dart +++ b/HipsterSync.dart @@ -43,22 +43,20 @@ class HipsterSync { verb = _methodMap.containsKey(method) ? _methodMap[method] : method; - XMLHttpRequest request = new XMLHttpRequest(); - Completer completer = new Completer(); - + var request = new XMLHttpRequest(), + completer = new Completer(); + request. on. load. add((event) { - XMLHttpRequest req = event.target; + var req = event.target; if (req.status > 299) { completer. completeException("That ain't gonna work: ${req.status}"); } else { - print("Success!"); - print(req.response); var json = JSON.parse(req.responseText); completer.complete(json); } @@ -66,9 +64,6 @@ class HipsterSync { request.open(verb, model.url, true); - // Tell the server that we expect JSON! - request.setRequestHeader("Accept", "application/json"); - // POST and PUT HTTP request bodies if necessary if (verb == 'post' || verb == 'put') { request.setRequestHeader('Content-type', 'application/json'); From 278b58652b77abf4038d89853501b5291928deb9 Mon Sep 17 00:00:00 2001 From: Timo Uhlmann Date: Thu, 5 Jul 2012 15:32:05 +0200 Subject: [PATCH 5/5] Revert "Changed RouterEventList.add to implement EventListenerList" This reverts commit 76ae759b0b9bc0920ff5fff9289a0217be7055d0. --- HipsterRouter.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HipsterRouter.dart b/HipsterRouter.dart index 1d42dcb..b8ec3fb 100644 --- a/HipsterRouter.dart +++ b/HipsterRouter.dart @@ -111,8 +111,8 @@ class RouterEventList implements EventListenerList { listeners = []; } - RouterEventList add(EventListener handler, [bool useCapture]) { - listeners.add(handler); + RouterEventList add(fn) { + listeners.add(fn); return this; }