diff --git a/packages/ember-routing/lib/system/route.js b/packages/ember-routing/lib/system/route.js index 50d2df4aab7..3a01298938c 100644 --- a/packages/ember-routing/lib/system/route.js +++ b/packages/ember-routing/lib/system/route.js @@ -154,16 +154,6 @@ let Route = EmberObject.extend(ActionHandler, Evented, { this.fullRouteName = getEngineRouteName(getOwner(this), name); }, - /** - Populates the QP meta information in the BucketCache. - - @private - @method _populateQPMeta - */ - _populateQPMeta() { - this._bucketCache.stash('route-meta', this.fullRouteName, this.get('_qp')); - }, - /** @private diff --git a/packages/ember-routing/lib/system/router.js b/packages/ember-routing/lib/system/router.js index 6bcb4e8a6e8..4769fc1ce92 100644 --- a/packages/ember-routing/lib/system/router.js +++ b/packages/ember-routing/lib/system/router.js @@ -609,7 +609,6 @@ const EmberRouter = EmberObject.extend(Evented, { } handler._setRouteName(routeName); - handler._populateQPMeta(); if (engineInfo && !hasDefaultSerialize(handler)) { throw new Error('Defining a custom serialize method on an Engine route is not supported.'); diff --git a/packages/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js b/packages/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js index 8b107e96437..14ff1adfff0 100644 --- a/packages/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js +++ b/packages/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js @@ -1,3 +1,4 @@ +import { get } from 'ember-metal'; import { RSVP } from 'ember-runtime'; import { Route } from 'ember-routing'; @@ -11,21 +12,37 @@ moduleFor('Query Params - async get handler', class extends QueryParamTestCase { return { location: 'test', + init() { + this._super(...arguments); + this._seenHandlers = Object.create(null); + this._handlerPromises = Object.create(null); + }, + _getQPMeta(handlerInfo) { - return this._bucketCache.lookup('route-meta', handlerInfo.name); + let handler = this._seenHandlers[handlerInfo.name]; + if (handler) { + return get(handler, '_qp'); + } }, _getHandlerFunction() { let getHandler = this._super(...arguments); - let cache = {}; + let handlerPromises = this._handlerPromises; + let seenHandlers = this._seenHandlers; return (routeName) => { fetchedHandlers.push(routeName); // Cache the returns so we don't have more than one Promise for a // given handler. - return cache[routeName] || (cache[routeName] = new RSVP.Promise((resolve) => { - setTimeout(() => resolve(getHandler(routeName)), 10); + return handlerPromises[routeName] || (handlerPromises[routeName] = new RSVP.Promise((resolve) => { + setTimeout(() => { + let handler = getHandler(routeName); + + seenHandlers[routeName] = handler; + + resolve(handler); + }, 10); })); }; }