tbranyen / backbone.routemanager

Better route management for Backbone.js projects.
MIT License
111 stars 10 forks source link

Doesn't reset state when you call reject/resolve #2

Open sontek opened 11 years ago

sontek commented 11 years ago

If you call this.defer() and later call this.resolve() it keeps handler.isDefer set as well as leaves the deferred in async._bucket. After you call resolve or reject this needs to reset the state so that you can continue doing routing.

sontek commented 11 years ago

This fixes it for me but probably not the best solution:

handler.defer = function(deferred) {
  handler._isDefer = true;

  // Allow a deferred to be passed in
  deferred = deferred || options.deferred();

  // Add to the list of deferreds
  async._bucket.push(deferred);

  var old_rej = deferred.reject
  var old_res = deferred.resolve

  deferred.reject = function() {

    handler.isDefer = false;
    async._bucket = [];
    old_rej();
  }

  deferred.resolve = function() {
    handler.isDefer = false;
    async._bucket = [];
    old_res();
  }

  return deferred;
};