diff --git a/src/compile/render-dom/wrappers/Element/index.ts b/src/compile/render-dom/wrappers/Element/index.ts index d289b84c4c..bae2d00dc9 100644 --- a/src/compile/render-dom/wrappers/Element/index.ts +++ b/src/compile/render-dom/wrappers/Element/index.ts @@ -445,8 +445,10 @@ export default class ElementWrapper extends Wrapper { const contextual_dependencies = new Set(); group.bindings.forEach(binding => { + // TODO this is a mess addToSet(dependencies, binding.dependencies); addToSet(contextual_dependencies, binding.contextual_dependencies); + addToSet(contextual_dependencies, binding.handler.contextual_dependencies); if (!binding.updateDom) return; diff --git a/src/compile/render-dom/wrappers/InlineComponent/index.ts b/src/compile/render-dom/wrappers/InlineComponent/index.ts index 57875da004..654de5cac9 100644 --- a/src/compile/render-dom/wrappers/InlineComponent/index.ts +++ b/src/compile/render-dom/wrappers/InlineComponent/index.ts @@ -192,7 +192,17 @@ export default class InlineComponentWrapper extends Wrapper { const contextual_dependencies = Array.from(binding.expression.contextual_dependencies); const dependencies = Array.from(binding.expression.dependencies); - const lhs = component.source.slice(binding.expression.node.start, binding.expression.node.end).trim(); + + let lhs = component.source.slice(binding.expression.node.start, binding.expression.node.end).trim(); + + if (binding.isContextual && binding.expression.node.type === 'Identifier') { + // bind:x={y} — we can't just do `y = x`, we need to + // to `array[index] = x; + const { name } = binding.expression.node; + const { object, property, snippet } = block.bindings.get(name)(); + lhs = snippet; + contextual_dependencies.push(object, property); + } const args = ['value']; if (contextual_dependencies.length > 0) { diff --git a/test/runtime/samples/bindings-coalesced/main.html b/test/runtime/samples/bindings-coalesced/main.html index 8b82af9e67..820c1812e9 100644 --- a/test/runtime/samples/bindings-coalesced/main.html +++ b/test/runtime/samples/bindings-coalesced/main.html @@ -1,6 +1,8 @@ {#each a as x}