Updated Branches:
  refs/heads/fauxton-file-reorder 5e29574e8 -> 2869f582f


Refactor routeObject.


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/2869f582
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/2869f582
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/2869f582

Branch: refs/heads/fauxton-file-reorder
Commit: 2869f582f0b6f4661a20f027506bbcac9d370bc0
Parents: 5e29574
Author: suelockwood <[email protected]>
Authored: Tue Jan 28 16:45:38 2014 -0500
Committer: suelockwood <[email protected]>
Committed: Tue Jan 28 16:45:38 2014 -0500

----------------------------------------------------------------------
 src/fauxton/app/core/routeObject.js | 115 +++++++++++++++++++------------
 1 file changed, 70 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/2869f582/src/fauxton/app/core/routeObject.js
----------------------------------------------------------------------
diff --git a/src/fauxton/app/core/routeObject.js 
b/src/fauxton/app/core/routeObject.js
index 9fe8f69..5014261 100644
--- a/src/fauxton/app/core/routeObject.js
+++ b/src/fauxton/app/core/routeObject.js
@@ -85,66 +85,91 @@ function(FauxtonAPI, Backbone) {
   }, {
 
     renderWith: function(route, masterLayout, args) {
-      var routeObject = this,
-          triggerBroadcast = _.bind(this.triggerBroadcast, this);
+      //set the configs for this object
+      this.config = {
+        masterLayout: masterLayout,
+        route: route,
+        args: args
+      };
 
+      //check if it's done the full initial render
+      this.checkRenderedState();
+
+      this.triggerBroadcast('beforeEstablish');
+
+      var success = _.bind(this.establishRouteSuccess, this),
+          error = _.bind(this.establishError, this),
+          promise = this.establish();
+
+      //call all the establish functions in each route
+
+      this.callEstablish(promise, success, error);
+
+      // Track that we've done a full initial render
+      this.setRenderedState(true);
+      this.triggerBroadcast('renderComplete');
+    },
+
+    callEstablish: function(establishPromise, successCallback, errorCallback){
+      this.addPromise(establishPromise);
+      FauxtonAPI.when(establishPromise).then(successCallback, errorCallback); 
+    },
+    establishViewSuccess: function(viewInfo, resp, xhr){
+      console.log(viewInfo);
+      var masterLayout = this.config.masterLayout;
+      masterLayout.setView(viewInfo.selector, viewInfo.view);
+      masterLayout.renderView(viewInfo.selector);
+      this.triggerBroadcast('afterRender', viewInfo.view, viewInfo.selector);
+    },
+    establishRouteSuccess: function(resp){
+      this.triggerBroadcast('afterEstablish');
+      this.renderEachView();
+    },
+    establishError: function(resp){
+      if (!resp || !resp.responseText) { return; }
+      FauxtonAPI.addNotification({
+            msg: 'An Error occurred' + JSON.parse(resp.responseText).reason,
+            type: 'error',
+            clear: true
+      });
+    },
+    setRenderedState: function(bool){
+      this.renderedState = bool;
+    },
+    checkRenderedState: function(){
       // Only want to redo the template if its a full render
       if (!this.renderedState) {
-        masterLayout.setTemplate(this.layout);
-        triggerBroadcast('beforeFullRender');
+        this.config.masterLayout.setTemplate(this.layout);
+        this.triggerBroadcast('beforeFullRender');
       }
+    },
+    callViewEstablish: function(promise, viewinfo){
+      var success = _.bind(this.establishViewSuccess, this, viewinfo),
+          error = _.bind(this.establishError, this),
+          callEstablish = _.bind(this.callEstablish, this);
 
-      triggerBroadcast('beforeEstablish');
-      var establishPromise = this.establish();
-      this.addPromise(establishPromise);
-      FauxtonAPI.when(establishPromise).then(function(resp) {
-        triggerBroadcast('afterEstablish');
+          callEstablish(promise, success, error);
+
+    },
+    renderEachView: function(){
+        var routeObject = this,
+            triggerBroadcast = _.bind(this.triggerBroadcast, this),
+            callViewEstablish = _.bind(this.callViewEstablish, this);
+            
         _.each(routeObject.getViews(), function(view, selector) {
+          var viewInfo = {view: view, selector: selector};
+
           if(view.hasRendered) { 
             triggerBroadcast('viewHasRendered', view, selector);
             return;
           }
 
           triggerBroadcast('beforeRender', view, selector);
+          
           var viewPromise = view.establish();
-          routeObject.addPromise(viewPromise);
-          FauxtonAPI.when(viewPromise).then(function(resp) {
-            masterLayout.setView(selector, view);
-
-            masterLayout.renderView(selector);
-            triggerBroadcast('afterRender', view, selector);
-            }, function(resp) {
-              view.establishError = {
-                error: true,
-                reason: resp
-              };
-
-              if (resp && resp.responseText) { 
-                var errorText = JSON.parse(resp.responseText).reason;
-                FauxtonAPI.addNotification({
-                  msg: 'An Error occurred: ' + errorText,
-                  type: 'error',
-                  clear: true
-                });
-              }
-              masterLayout.renderView(selector);
-          });
-
+          callViewEstablish(viewPromise, viewInfo);
         });
-      }.bind(this), function (resp) {
-          if (!resp || !resp.responseText) { return; }
-          FauxtonAPI.addNotification({
-                msg: 'An Error occurred' + 
JSON.parse(resp.responseText).reason,
-                type: 'error',
-                clear: true
-          });
-      });
-
-      // Track that we've done a full initial render
-      this.renderedState = true;
-      triggerBroadcast('renderComplete');
     },
-
     triggerBroadcast: function (eventName) {
       var args = Array.prototype.slice.call(arguments);
       this.trigger.apply(this, args);

Reply via email to