From e54757a6204ba180c5ca16fbedd66615f780bf1c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 26 Apr 2018 22:31:42 -0400 Subject: [PATCH] fix contextual component bindings --- src/generators/nodes/Component.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/generators/nodes/Component.ts b/src/generators/nodes/Component.ts index e1c97fe8b4..20267fdd06 100644 --- a/src/generators/nodes/Component.ts +++ b/src/generators/nodes/Component.ts @@ -243,15 +243,19 @@ export default class Component extends Node { let setFromChild; - if (block.contexts.has(key)) { + if (block.contexts.has(key)) { // TODO remove block.contexts const computed = isComputed(binding.value.node); const tail = binding.value.node.type === 'MemberExpression' ? getTailSnippet(binding.value.node) : ''; const list = block.listNames.get(key); const index = block.indexNames.get(key); + const lhs = binding.value.node.type === 'MemberExpression' + ? binding.value.snippet + : `ctx.${list}[ctx.${index}]${tail} = childState.${binding.name}`; + setFromChild = deindent` - ${list}[${index}]${tail} = childState.${binding.name}; + ${lhs} = childState.${binding.name}; ${[...binding.value.dependencies] .map((name: string) => { @@ -307,8 +311,9 @@ export default class Component extends Node { `); }); + block.maintainContext = true; // TODO put this somewhere more logical + const initialisers = [ - 'ctx = #component.get()', hasLocalBindings && 'newState = {}', hasStoreBindings && 'newStoreState = {}', ].filter(Boolean).join(', ');