From 2cb4ca2c8d374a357e394d4a821ebe2708740fa2 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 27 Feb 2017 17:28:15 -0500 Subject: [PATCH] fix #301, even with non-primitive values --- src/generators/dom/visitors/Element.js | 10 +++++--- .../dom/visitors/attributes/binding/index.js | 24 +++++++++++++++++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/generators/dom/visitors/Element.js b/src/generators/dom/visitors/Element.js index 6e7370a15b..57b178b3cf 100644 --- a/src/generators/dom/visitors/Element.js +++ b/src/generators/dom/visitors/Element.js @@ -10,7 +10,7 @@ export default { return Component.enter( generator, node ); } - const name = node.localName = generator.current.getUniqueName( node.name ); + const name = generator.current.getUniqueName( node.name ); const local = { name, @@ -111,8 +111,12 @@ export default { return Component.leave( generator, node ); } - if ( generator.current.initialUpdate ) { - generator.current.builders.init.addBlock( generator.current.initialUpdate ); + if ( node.initialUpdate ) { + console.log( `node.initialUpdate`, node.initialUpdate ) + //generator.current.builders.init.addBlock( node.initialUpdate ); + generator.current.builders.init.addBlock( + `/*HELLO*/` + node.initialUpdate + ); } generator.pop(); diff --git a/src/generators/dom/visitors/attributes/binding/index.js b/src/generators/dom/visitors/attributes/binding/index.js index d884765e52..b45793188c 100644 --- a/src/generators/dom/visitors/attributes/binding/index.js +++ b/src/generators/dom/visitors/attributes/binding/index.js @@ -116,7 +116,27 @@ export default function createBinding ( generator, node, attribute, current, loc } ` ); } else { - const updateElement = `${local.name}.${attribute.name} = ${contextual ? attribute.value : `root.${attribute.value}`};`; + let updateElement; + + if ( node.name === 'select' ) { + // TODO select multiple + const value = generator.current.getUniqueName( 'value' ); + const i = generator.current.getUniqueName( 'i' ); + const option = generator.current.getUniqueName( 'option' ); + + updateElement = deindent` + var ${value} = ${contextual ? attribute.value : `root.${attribute.value}`}; + for ( var ${i} = 0; ${i} < ${local.name}.options.length; ${i} += 1 ) { + var ${option} = ${local.name}.options[${i}]; + if ( ${option}.__value === ${value} ) { + ${option}.selected = true; + break; + } + } + `; + } else { + updateElement = `${local.name}.${attribute.name} = ${contextual ? attribute.value : `root.${attribute.value}`};`; + } generator.uses.addEventListener = true; generator.uses.removeEventListener = true; @@ -132,7 +152,7 @@ export default function createBinding ( generator, node, attribute, current, loc addEventListener( ${local.name}, '${eventName}', ${handler} ); ` ); - generator.current.initialUpdate = updateElement; + node.initialUpdate = updateElement; local.update.addLine( `if ( !${local.name}_updating ) ${updateElement}`