From baa457376034e5e3e46366e840b31675b349b619 Mon Sep 17 00:00:00 2001 From: Godfrey Chan Date: Wed, 20 May 2015 01:46:51 -0700 Subject: [PATCH] Don't dispatch new lifecycle hooks to views Since 84c2875, the lifecycle hooks are inconsistent between views and components. For example, the `willReceiveAttrs` hook has been renamed to `didReceiveAttrs` on components but not on views. Talked to @wycats about it, the plan is "to remove all of the new lifecycle hooks from views", because "views are sufficiently crazy that I don't want to try to mix in new semantics". In this commit: - [x] :scissors: `didUpdate` from `View`s - [x] :scissors: `willReceiveAttrs` from `View`s - [x] Rename `willRender` to `_willRender` on `View`s (for now) - [x] Rename `willUpdate` to `_willUpdate` on `View`s (for now) TODO: - [ ] Refactor internal `View`s to not use `_willRender` - [ ] Refactor internal `View`s to not use `_willUpdate` - [ ] :scissors: `_willRender` from `View`s - [ ] :scissors: `_willUpdate` from `View`s --- .../lib/node-managers/view-node-manager.js | 5 ----- .../tests/integration/component_lifecycle_test.js | 2 +- packages/ember-metal-views/lib/renderer.js | 15 ++++----------- packages/ember-views/lib/views/collection_view.js | 2 +- .../ember-views/lib/views/legacy_each_view.js | 2 +- packages/ember-views/lib/views/select.js | 4 ++-- .../tests/views/container_view_test.js | 4 ++-- 7 files changed, 11 insertions(+), 23 deletions(-) diff --git a/packages/ember-htmlbars/lib/node-managers/view-node-manager.js b/packages/ember-htmlbars/lib/node-managers/view-node-manager.js index 78662ec0341..4abb64acaa7 100644 --- a/packages/ember-htmlbars/lib/node-managers/view-node-manager.js +++ b/packages/ember-htmlbars/lib/node-managers/view-node-manager.js @@ -98,7 +98,6 @@ ViewNodeManager.prototype.render = function(env, attrs, visitor) { if (component) { var snapshot = takeSnapshot(attrs); env.renderer.setAttrs(this.component, snapshot); - env.renderer.willCreateElement(component); env.renderer.willRender(component); env.renderedViews.push(component.elementId); } @@ -147,10 +146,6 @@ ViewNodeManager.prototype.rerender = function(env, attrs, visitor) { this.block(newEnv, [], undefined, this.renderNode, this.scope, visitor); } - if (component) { - env.lifecycleHooks.push({ type: 'didUpdate', view: component }); - } - return newEnv; }, this); }; diff --git a/packages/ember-htmlbars/tests/integration/component_lifecycle_test.js b/packages/ember-htmlbars/tests/integration/component_lifecycle_test.js index c2daeaf7c7b..6aa6b26ee5d 100644 --- a/packages/ember-htmlbars/tests/integration/component_lifecycle_test.js +++ b/packages/ember-htmlbars/tests/integration/component_lifecycle_test.js @@ -176,7 +176,7 @@ QUnit.test('lifecycle hooks are invoked in a predictable order', function() { // Because the `twitter` attr is only used by the topmost component, // and not passed down, we do not expect to see lifecycle hooks - // called for child components. If the `willReceiveAttrs` hook used + // called for child components. If the `didReceiveAttrs` hook used // the new attribute to rerender itself imperatively, that would result // in lifecycle hooks being invoked for the child. diff --git a/packages/ember-metal-views/lib/renderer.js b/packages/ember-metal-views/lib/renderer.js index 17c0dddc6e8..a64a9e5c489 100755 --- a/packages/ember-metal-views/lib/renderer.js +++ b/packages/ember-metal-views/lib/renderer.js @@ -116,9 +116,6 @@ Renderer.prototype.createElement = this.prerenderTopLevelView(view, morph); }; -// inBuffer -Renderer.prototype.willCreateElement = function (/*view*/) {}; - Renderer.prototype.didCreateElement = function (view, element) { if (element) { view.element = element; @@ -160,10 +157,6 @@ Renderer.prototype.didRender = function (view) { }; Renderer.prototype.updateAttrs = function (view, attrs) { - if (view.willReceiveAttrs) { - view.willReceiveAttrs(attrs); - } - this.setAttrs(view, attrs); }; // setting new attrs @@ -175,8 +168,8 @@ Renderer.prototype.componentUpdateAttrs = function (component, oldAttrs, newAttr }; Renderer.prototype.willUpdate = function (view, attrs) { - if (view.willUpdate) { - view.willUpdate(attrs); + if (view._willUpdate) { + view._willUpdate(attrs); } }; @@ -185,8 +178,8 @@ Renderer.prototype.componentWillUpdate = function (component) { }; Renderer.prototype.willRender = function (view) { - if (view.willRender) { - view.willRender(); + if (view._willRender) { + view._willRender(); } }; diff --git a/packages/ember-views/lib/views/collection_view.js b/packages/ember-views/lib/views/collection_view.js index cafcd59bf3b..52e0c022d96 100644 --- a/packages/ember-views/lib/views/collection_view.js +++ b/packages/ember-views/lib/views/collection_view.js @@ -401,7 +401,7 @@ var CollectionView = ContainerView.extend({ return view; }, - willRender: function() { + _willRender: function() { var attrs = this.attrs; var itemProps = buildItemViewProps(this._itemViewTemplate, attrs); this._itemViewProps = itemProps; diff --git a/packages/ember-views/lib/views/legacy_each_view.js b/packages/ember-views/lib/views/legacy_each_view.js index 344bc90d773..7e9eadbd54f 100644 --- a/packages/ember-views/lib/views/legacy_each_view.js +++ b/packages/ember-views/lib/views/legacy_each_view.js @@ -27,7 +27,7 @@ export default View.extend({ return controller; }), - willUpdate(attrs) { + _willUpdate(attrs) { let itemController = this.getAttrFor(attrs, 'itemController'); if (itemController) { diff --git a/packages/ember-views/lib/views/select.js b/packages/ember-views/lib/views/select.js index 7936ead31d6..ff0c0be2f86 100644 --- a/packages/ember-views/lib/views/select.js +++ b/packages/ember-views/lib/views/select.js @@ -37,7 +37,7 @@ var SelectOption = View.extend({ content: null, - willRender() { + _willRender() { this.labelPathDidChange(); this.valuePathDidChange(); }, @@ -651,7 +651,7 @@ var Select = View.extend({ } }, - willRender() { + _willRender() { this._setDefaults(); }, diff --git a/packages/ember-views/tests/views/container_view_test.js b/packages/ember-views/tests/views/container_view_test.js index 19ce3b43f18..46e723fac8d 100644 --- a/packages/ember-views/tests/views/container_view_test.js +++ b/packages/ember-views/tests/views/container_view_test.js @@ -512,7 +512,7 @@ QUnit.test("should be able to modify childViews then rerender then modify again var Child = View.extend({ count: 0, - willRender: function() { + _willRender() { this.count++; }, template: compile('{{view.label}}') @@ -541,7 +541,7 @@ QUnit.test("should be able to modify childViews then rerender again the Containe var Child = View.extend({ count: 0, - willRender() { + _willRender() { this.count++; }, template: compile('{{view.label}}')