From 67300d66c6d2bb42ee8bd0defc204ca7e2884307 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Tue, 13 Sep 2016 13:17:46 -0400 Subject: [PATCH] Prevent issues during destruction when `parentView` is observed. Setting `parentView` to `null` is technically better, but unfortunately we have not had this reset in place for a while and folks have dependent keys that include `parentView`. Setting without `Ember.set` triggers the mandatory setter assertion. This removes the clearing of `parentView` (for now) so that we can properly message it being unobservable in the future. --- .../components/curly-components-test.js | 15 +++++++++++++++ .../lib/hooks/cleanup-render-node.js | 1 - 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/ember-glimmer/tests/integration/components/curly-components-test.js b/packages/ember-glimmer/tests/integration/components/curly-components-test.js index ed562d72461..bacdf9fa3f9 100644 --- a/packages/ember-glimmer/tests/integration/components/curly-components-test.js +++ b/packages/ember-glimmer/tests/integration/components/curly-components-test.js @@ -2565,4 +2565,19 @@ moduleFor('Components test: curly components', class extends RenderingTest { this.assertText('things'); } + + ['@test using parentView in the template does not error during destruction']() { + this.registerComponent('foo-bar', { + ComponentClass: Component.extend({ + title: computed('parentView.title', function() { + return this.get('parentView.title'); + }) + }), + template: `{{title}}` + }); + + this.render(`{{foo-bar}}`, { title: 'things' }); + + this.assertText('things'); + } }); diff --git a/packages/ember-htmlbars/lib/hooks/cleanup-render-node.js b/packages/ember-htmlbars/lib/hooks/cleanup-render-node.js index 92b262962a2..02b7f2ffa25 100644 --- a/packages/ember-htmlbars/lib/hooks/cleanup-render-node.js +++ b/packages/ember-htmlbars/lib/hooks/cleanup-render-node.js @@ -18,7 +18,6 @@ export default function cleanupRenderNode(renderNode) { if (view.parentView && view.parentView === env.view) { view.parentView.removeChild(view); } - view.parentView = null; view._transitionTo('preRender'); });