diff --git a/packages/ember-routing/lib/system/controller_for.js b/packages/ember-routing/lib/system/controller_for.js index af8afe38783..3e267dd3f49 100644 --- a/packages/ember-routing/lib/system/controller_for.js +++ b/packages/ember-routing/lib/system/controller_for.js @@ -7,9 +7,13 @@ Ember.generateController = function(container, controllerName, context) { var controller; if (context && Ember.isArray(context)) { - controller = Ember.ArrayController.extend({content: context}); + controller = Ember.ArrayController.extend({ + content: context + }); } else if (context) { - controller = Ember.ObjectController.extend({content: context}); + controller = Ember.ObjectController.extend({ + content: context + }); } else { controller = Ember.Controller.extend(); } diff --git a/packages/ember-routing/lib/system/route.js b/packages/ember-routing/lib/system/route.js index 3d9fa3e3510..8aff7e7bc4b 100644 --- a/packages/ember-routing/lib/system/route.js +++ b/packages/ember-routing/lib/system/route.js @@ -55,6 +55,10 @@ Ember.Route = Ember.Object.extend({ var controller = this.controllerFor(this.templateName, context); + if (controller) { + set(controller, 'model', context); + } + if (this.setupControllers) { Ember.deprecate("Ember.Route.setupControllers is deprecated. Please use Ember.Route.setupController(controller, model) instead."); this.setupControllers(controller, context); @@ -208,11 +212,7 @@ Ember.Route = Ember.Object.extend({ @method setupController */ - setupController: function(controller, model) { - if (controller) { - controller.set('content', model); - } - }, + setupController: Ember.K, /** Returns the controller for a particular route. diff --git a/packages/ember/tests/routing/basic_test.js b/packages/ember/tests/routing/basic_test.js index 2f3e8df5687..1fa9bf88a89 100644 --- a/packages/ember/tests/routing/basic_test.js +++ b/packages/ember/tests/routing/basic_test.js @@ -226,6 +226,35 @@ test("The Homepage with a `setupController` hook", function() { equal(Ember.$('ul li', '#qunit-fixture').eq(2).text(), "Sunday: Noon to 6pm", "The template was rendered with the hours context"); }); +test("The default controller's model is still set when overriding the setupController hook", function() { + Router.map(function() { + this.route("home", { path: "/" }); + }); + + App.HomeRoute = Ember.Route.extend({ + model: function() { + return { + isModel: true + }; + }, + + setupController: function(controller) { + // no-op + // importantly, we are not calling this._super here + } + }); + + Ember.TEMPLATES.home = Ember.Handlebars.compile( + "" + ); + + container.register('controller', 'home', Ember.Controller.extend()); + + bootApplication(); + + deepEqual(container.lookup('controller:home').get('model'), { isModel: true }, "model is still set on controller"); +}); + test("The Homepage with a `setupController` hook modifying other controllers", function() { Router.map(function() { this.route("home", { path: "/" });