From fcd906eed66f2e4f1c7ebbc1be471aec965e98d0 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Sun, 24 Jul 2016 18:12:24 -0700 Subject: [PATCH 1/2] Remove `View#createElement`. --- packages/ember-htmlbars/lib/renderer.js | 13 +------ .../ember-views/lib/mixins/view_support.js | 23 ----------- .../tests/views/instrumentation_test.js | 6 --- .../tests/views/view/create_element_test.js | 38 ------------------- 4 files changed, 1 insertion(+), 79 deletions(-) delete mode 100644 packages/ember-views/tests/views/view/create_element_test.js diff --git a/packages/ember-htmlbars/lib/renderer.js b/packages/ember-htmlbars/lib/renderer.js index 75ab0104ca7..7c1a05e1e41 100755 --- a/packages/ember-htmlbars/lib/renderer.js +++ b/packages/ember-htmlbars/lib/renderer.js @@ -64,11 +64,7 @@ Renderer.prototype.revalidateTopLevelView = // This guard prevents revalidation on an already-destroyed view. if (view._renderNode.lastResult) { view._renderNode.lastResult.revalidate(view.env); - // supports createElement, which operates without moving the view into - // the inDOM state. - if (view._state === 'inDOM') { - this.dispatchLifecycleHooks(view.env); - } + this.dispatchLifecycleHooks(view.env); this.clearRenderedViews(view.env); } }; @@ -149,13 +145,6 @@ Renderer.prototype.replaceIn = run.scheduleOnce('render', this, this.renderTopLevelView, view, morph); }; -Renderer.prototype.createElement = - function Renderer_createElement(view) { - let morph = this._dom.createFragmentMorph(); - morph.ownerNode = morph; - this.prerenderTopLevelView(view, morph); - }; - Renderer.prototype.didCreateElement = function (view, element) { if (element) { view.element = element; diff --git a/packages/ember-views/lib/mixins/view_support.js b/packages/ember-views/lib/mixins/view_support.js index 32b8e937934..c77f2e60a4f 100644 --- a/packages/ember-views/lib/mixins/view_support.js +++ b/packages/ember-views/lib/mixins/view_support.js @@ -114,9 +114,6 @@ export default Mixin.create({ /** Appends the view's element to the specified parent element. - If the view does not have an HTML representation yet, `createElement()` - will be called automatically. - Note that this method just schedules the view to be appended; the DOM element will not be appended to the given element until all bindings have finished synchronizing. @@ -297,26 +294,6 @@ export default Mixin.create({ return jQuery(id)[0] || jQuery(id, parentElem)[0]; }, - /** - Creates a DOM representation of the view and all of its child views by - recursively calling the `render()` method. Once the element is created, - it sets the `element` property of the view to the rendered element. - - After the element has been inserted into the DOM, `didInsertElement` will - be called on this view and all of its child views. - - @method createElement - @return {Ember.View} receiver - @private - */ - createElement() { - if (this.element) { return this; } - - this.renderer.createElement(this); - - return this; - }, - /** Called when a view is going to insert an element into the DOM. diff --git a/packages/ember-views/tests/views/instrumentation_test.js b/packages/ember-views/tests/views/instrumentation_test.js index 08d5328f6e6..21434a35785 100644 --- a/packages/ember-views/tests/views/instrumentation_test.js +++ b/packages/ember-views/tests/views/instrumentation_test.js @@ -50,9 +50,3 @@ QUnit.test('generates the proper instrumentation details when called directly', confirmPayload(payload, view); }); - -QUnit.test('should add ember-view to views', function() { - run(view, 'createElement'); - - confirmPayload(beforeCalls[0], view); -}); diff --git a/packages/ember-views/tests/views/view/create_element_test.js b/packages/ember-views/tests/views/view/create_element_test.js deleted file mode 100644 index ad6558c4976..00000000000 --- a/packages/ember-views/tests/views/view/create_element_test.js +++ /dev/null @@ -1,38 +0,0 @@ -import { get } from 'ember-metal/property_get'; -import run from 'ember-metal/run_loop'; -import EmberView from 'ember-views/views/view'; -import { compile } from 'ember-htmlbars-template-compiler'; - -let view; - -QUnit.module('Ember.View#createElement', { - teardown() { - run(function() { - view.destroy(); - }); - } -}); - -QUnit.test('returns the receiver', function() { - view = EmberView.create(); - - let ret = run(() => view.createElement()); - - equal(ret, view, 'returns receiver'); -}); - -QUnit.test('calls render and turns resultant string into element', function() { - view = EmberView.create({ - tagName: 'span', - template: compile('foo') - }); - - equal(get(view, 'element'), null, 'precondition - has no element'); - - run(() => view.createElement()); - - let elem = get(view, 'element'); - ok(elem, 'has element now'); - equal(elem.innerHTML, 'foo', 'has innerHTML from context'); - equal(elem.tagName.toString().toLowerCase(), 'span', 'has tagName from view'); -}); From 5327eb0f699761c33341487d46334b56bbc4b57a Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Sun, 24 Jul 2016 18:16:45 -0700 Subject: [PATCH 2/2] Remove `View#destroyElement` method. --- .../ember-views/lib/mixins/view_support.js | 24 --------- .../ember-views/lib/views/states/default.js | 2 - .../lib/views/states/destroying.js | 3 -- .../lib/views/states/has_element.js | 4 -- .../tests/views/view/append_to_test.js | 22 -------- .../tests/views/view/destroy_element_test.js | 51 ------------------- 6 files changed, 106 deletions(-) delete mode 100644 packages/ember-views/tests/views/view/destroy_element_test.js diff --git a/packages/ember-views/lib/mixins/view_support.js b/packages/ember-views/lib/mixins/view_support.js index c77f2e60a4f..26a4ed87603 100644 --- a/packages/ember-views/lib/mixins/view_support.js +++ b/packages/ember-views/lib/mixins/view_support.js @@ -325,30 +325,6 @@ export default Mixin.create({ */ willClearRender: K, - /** - Destroys any existing element along with the element for any child views - as well. If the view does not currently have a element, then this method - will do nothing. - - If you implement `willDestroyElement()` on your view, then this method will - be invoked on your view before your element is destroyed to give you a - chance to clean up any event handlers, etc. - - If you write a `willDestroyElement()` handler, you can assume that your - `didInsertElement()` handler was called earlier for the same element. - - You should not call or override this method yourself, but you may - want to implement the above callbacks. - - @method destroyElement - @return {Ember.View} receiver - @private - */ - destroyElement() { - this._currentState.destroyElement(this); - return this; - }, - /** You must call `destroy` on a view to destroy the view (and all of its child views). This will remove the view from any parent node, then make diff --git a/packages/ember-views/lib/views/states/default.js b/packages/ember-views/lib/views/states/default.js index 066581d150f..42f4a788718 100644 --- a/packages/ember-views/lib/views/states/default.js +++ b/packages/ember-views/lib/views/states/default.js @@ -38,8 +38,6 @@ export default { return true; // continue event propagation }, - destroyElement() { }, - destroy() { }, rerender(view) { diff --git a/packages/ember-views/lib/views/states/destroying.js b/packages/ember-views/lib/views/states/destroying.js index 25c6ea59c67..2be7395e3db 100644 --- a/packages/ember-views/lib/views/states/destroying.js +++ b/packages/ember-views/lib/views/states/destroying.js @@ -14,9 +14,6 @@ assign(destroying, { }, rerender() { throw new EmberError('You can\'t call rerender on a view being destroyed'); - }, - destroyElement() { - throw new EmberError('You can\'t call destroyElement on a view being destroyed'); } }); diff --git a/packages/ember-views/lib/views/states/has_element.js b/packages/ember-views/lib/views/states/has_element.js index c84691b6b79..82ea3c932e8 100644 --- a/packages/ember-views/lib/views/states/has_element.js +++ b/packages/ember-views/lib/views/states/has_element.js @@ -33,10 +33,6 @@ assign(hasElement, { view.renderer.rerender(view); }, - destroyElement(view) { - view.renderer.remove(view, false); - }, - destroy(view) { view.renderer.remove(view, true); }, diff --git a/packages/ember-views/tests/views/view/append_to_test.js b/packages/ember-views/tests/views/view/append_to_test.js index bf29ab5575e..e1f73c13b29 100644 --- a/packages/ember-views/tests/views/view/append_to_test.js +++ b/packages/ember-views/tests/views/view/append_to_test.js @@ -88,28 +88,6 @@ QUnit.test('raises an assert when a target does not exist in the DOM', function( }); -QUnit.test('remove removes an element from the DOM', function() { - willDestroyCalled = 0; - - view = View.create({ - willDestroyElement() { - willDestroyCalled++; - } - }); - - ok(!get(view, 'element'), 'precond - should not have an element'); - - run(() => view.append()); - - ok(jQuery('#' + get(view, 'elementId')).length === 1, 'precond - element was inserted'); - - run(() => view.destroyElement()); - - ok(jQuery('#' + get(view, 'elementId')).length === 0, 'remove removes an element from the DOM'); - ok(!get(view, 'element'), 'remove nulls out the element'); - equal(willDestroyCalled, 1, 'the willDestroyElement hook was called once'); -}); - QUnit.test('destroy more forcibly removes the view', function() { willDestroyCalled = 0; diff --git a/packages/ember-views/tests/views/view/destroy_element_test.js b/packages/ember-views/tests/views/view/destroy_element_test.js deleted file mode 100644 index 9cf9bf38a8d..00000000000 --- a/packages/ember-views/tests/views/view/destroy_element_test.js +++ /dev/null @@ -1,51 +0,0 @@ -import { get } from 'ember-metal/property_get'; -import run from 'ember-metal/run_loop'; -import EmberView from 'ember-views/views/view'; - -let view; - -QUnit.module('EmberView#destroyElement', { - teardown() { - run(() => view.destroy()); - } -}); - -QUnit.test('if it has no element, does nothing', function() { - let callCount = 0; - view = EmberView.create({ - willDestroyElement() { callCount++; } - }); - - ok(!get(view, 'element'), 'precond - does NOT have element'); - - run(() => view.destroyElement()); - - equal(callCount, 0, 'did not invoke callback'); -}); - -QUnit.test('returns receiver', function() { - let ret; - view = EmberView.create(); - - run(() => { - view.createElement(); - ret = view.destroyElement(); - }); - - equal(ret, view, 'returns receiver'); -}); - -QUnit.test('removes element from parentNode if in DOM', function() { - view = EmberView.create(); - - run(() => view.append()); - - let parent = view.$().parent(); - - ok(get(view, 'element'), 'precond - has element'); - - run(() => view.destroyElement()); - - equal(view.$(), undefined, 'view has no selector'); - ok(!parent.find('#' + view.get('elementId')).length, 'element no longer in parent node'); -});