fix contextual component bindings

pull/1864/head
Rich Harris 7 years ago
parent 6c854a6d57
commit 4c2fdcf657

@ -445,8 +445,10 @@ export default class ElementWrapper extends Wrapper {
const contextual_dependencies = new Set(); const contextual_dependencies = new Set();
group.bindings.forEach(binding => { group.bindings.forEach(binding => {
// TODO this is a mess
addToSet(dependencies, binding.dependencies); addToSet(dependencies, binding.dependencies);
addToSet(contextual_dependencies, binding.contextual_dependencies); addToSet(contextual_dependencies, binding.contextual_dependencies);
addToSet(contextual_dependencies, binding.handler.contextual_dependencies);
if (!binding.updateDom) return; if (!binding.updateDom) return;

@ -192,7 +192,17 @@ export default class InlineComponentWrapper extends Wrapper {
const contextual_dependencies = Array.from(binding.expression.contextual_dependencies); const contextual_dependencies = Array.from(binding.expression.contextual_dependencies);
const dependencies = Array.from(binding.expression.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']; const args = ['value'];
if (contextual_dependencies.length > 0) { if (contextual_dependencies.length > 0) {

@ -1,6 +1,8 @@
<script> <script>
import Foo from './Foo.html'; import Foo from './Foo.html';
export let p;
export let foo; export let foo;
export let bar; export let bar;
export let baz; export let baz;

Loading…
Cancel
Save