diff --git a/src/compiler/compile/nodes/Binding.ts b/src/compiler/compile/nodes/Binding.ts index 29992f940f..8fc983254b 100644 --- a/src/compiler/compile/nodes/Binding.ts +++ b/src/compiler/compile/nodes/Binding.ts @@ -4,6 +4,7 @@ import Expression from './shared/Expression'; import Component from '../Component'; import TemplateScope from './shared/TemplateScope'; import {dimensions} from "../../utils/patterns"; +import { Node as ESTreeNode } from 'estree'; import { x } from 'code-red'; // TODO this should live in a specific binding @@ -18,6 +19,7 @@ export default class Binding extends Node { type: 'Binding'; name: string; expression: Expression; + raw_expression: ESTreeNode; // TODO exists only for bind:this — is there a more elegant solution? is_contextual: boolean; obj: string; prop: string; @@ -35,6 +37,7 @@ export default class Binding extends Node { this.name = info.name; this.expression = new Expression(component, this, scope, info.expression); + this.raw_expression = JSON.parse(JSON.stringify(info.expression)); let obj; let prop; diff --git a/src/compiler/compile/render_dom/index.ts b/src/compiler/compile/render_dom/index.ts index eeb4d3b2b4..9a3e955cad 100644 --- a/src/compiler/compile/render_dom/index.ts +++ b/src/compiler/compile/render_dom/index.ts @@ -416,7 +416,7 @@ export default function dom( ${inject_state && x`$$self.$inject_state = ${inject_state};`} - ${injected.length && `let ${injected.join(', ')};`} + ${injected.map(name => b`let ${name};`)} ${reactive_declarations.length > 0 && b` $$self.$$.update = ($$dirty = ${reactive_dependencies}) => { diff --git a/src/compiler/compile/render_dom/wrappers/Element/Binding.ts b/src/compiler/compile/render_dom/wrappers/Element/Binding.ts index 1d5bc481ee..ee30d440a7 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/Binding.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/Binding.ts @@ -7,7 +7,7 @@ import Renderer from '../../Renderer'; import flatten_reference from '../../../utils/flatten_reference'; import EachBlock from '../../../nodes/EachBlock'; import { changed } from '../shared/changed'; -import { Node, Identifier } from 'estree'; +import { Node, Identifier, MemberExpression } from 'estree'; export default class BindingWrapper { node: Binding; @@ -51,12 +51,8 @@ export default class BindingWrapper { this.object = get_object(this.node.expression.node).name; - // TODO unfortunate code is necessary because we need to use `ctx` - // inside the fragment, but not inside the -

{a} + {b} = {a + b}

\ No newline at end of file +{#each items as item, j} +
{item}
+{/each} \ No newline at end of file