From c1d230d625183e69623572c2c1d4eda7fd0a734f Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Fri, 25 Nov 2016 22:35:41 -0500 Subject: [PATCH] =?UTF-8?q?only=20set=20ref=20to=20null=20when=20tearing?= =?UTF-8?q?=20down=20if=20it=20is=20still=20current=20=E2=80=93=C2=A0close?= =?UTF-8?q?s=20#24?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attributes/addComponentAttributes.js | 2 +- .../attributes/addElementAttributes.js | 2 +- test/compiler/refs-unset/_config.js | 23 +++++++++++++++++++ test/compiler/refs-unset/main.html | 5 ++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 test/compiler/refs-unset/_config.js create mode 100644 test/compiler/refs-unset/main.html diff --git a/compiler/generate/visitors/attributes/addComponentAttributes.js b/compiler/generate/visitors/attributes/addComponentAttributes.js index f574f17459..9f002cd6c4 100644 --- a/compiler/generate/visitors/attributes/addComponentAttributes.js +++ b/compiler/generate/visitors/attributes/addComponentAttributes.js @@ -116,7 +116,7 @@ export default function addComponentAttributes ( generator, node, local ) { ` ); local.teardown.push( deindent` - component.refs.${attribute.name} = null; + if ( component.refs.${attribute.name} === ${local.name} ) component.refs.${attribute.name} = null; ` ); } diff --git a/compiler/generate/visitors/attributes/addElementAttributes.js b/compiler/generate/visitors/attributes/addElementAttributes.js index f1501a61b1..d50d8173b6 100644 --- a/compiler/generate/visitors/attributes/addElementAttributes.js +++ b/compiler/generate/visitors/attributes/addElementAttributes.js @@ -166,7 +166,7 @@ export default function addElementAttributes ( generator, node, local ) { ` ); local.teardown.push( deindent` - component.refs.${attribute.name} = null; + if ( component.refs.${attribute.name} === ${local.name} ) component.refs.${attribute.name} = null; ` ); } diff --git a/test/compiler/refs-unset/_config.js b/test/compiler/refs-unset/_config.js new file mode 100644 index 0000000000..dd69303ec7 --- /dev/null +++ b/test/compiler/refs-unset/_config.js @@ -0,0 +1,23 @@ +export default { + data: { + x: true + }, + + html: '', + + test ( assert, component, target ) { + let canvas = target.querySelector( 'canvas' ); + assert.equal( canvas, component.refs.foo ); + assert.equal( canvas.getAttribute( 'data-x' ), 'true' ); + + component.set({ x: false }); + canvas = target.querySelector( 'canvas' ); + assert.equal( canvas, component.refs.foo ); + assert.equal( canvas.getAttribute( 'data-x' ), 'false' ); + + component.set({ x: true }); + canvas = target.querySelector( 'canvas' ); + assert.equal( canvas, component.refs.foo ); + assert.equal( canvas.getAttribute( 'data-x' ), 'true' ); + } +}; diff --git a/test/compiler/refs-unset/main.html b/test/compiler/refs-unset/main.html new file mode 100644 index 0000000000..0fe6856d8f --- /dev/null +++ b/test/compiler/refs-unset/main.html @@ -0,0 +1,5 @@ +{{#if x}} + +{{else}} + +{{/if}}