fix some binding stuff

pull/3986/head
Richard Harris 6 years ago
parent 3b5155e46c
commit 81c2e4fdfc

@ -22,6 +22,7 @@ export default class Renderer {
context: ContextMember[] = [];
context_lookup: Map<string, ContextMember> = new Map();
context_overflow: boolean;
is_update: Node;
blocks: Array<Block | Node | Node[]> = [];
readonly: Set<string> = new Set();
meta_bindings: Array<Node | Node[]> = []; // initial values for e.g. window.innerWidth, if there's a <svelte:window> meta tag
@ -82,6 +83,9 @@ export default class Renderer {
);
this.context_overflow = this.context.length > 31;
this.is_update = this.context_overflow
? x`#dirty[0] !== -1`
: x`#dirty !== -1`;
// TODO messy
this.blocks.forEach(block => {

@ -125,12 +125,8 @@ export default class BindingWrapper {
}
case 'textContent':
update_conditions.push(x`${this.snippet} !== ${parent.var}.textContent`);
mount_conditions.push(x`${this.snippet} !== void 0`);
break;
case 'innerHTML':
update_conditions.push(x`${this.snippet} !== ${parent.var}.innerHTML`);
update_conditions.push(x`${this.parent.renderer.is_update} && ${this.snippet} !== ${parent.var}.${this.node.name}`);
mount_conditions.push(x`${this.snippet} !== void 0`);
break;

@ -500,7 +500,7 @@ export default class IfBlockWrapper extends Wrapper {
render_simple(
block: Block,
_parent_node: Identifier,
parent_node: Identifier,
_parent_nodes: Identifier,
dynamic,
{ name, anchor, if_exists_condition, has_transitions },
@ -509,7 +509,8 @@ export default class IfBlockWrapper extends Wrapper {
const branch = this.branches[0];
if (branch.snippet) block.add_variable(branch.condition, branch.snippet);
block.add_variable(name);
let initial = null;
if (branch.dependencies.length > 0) {
const update_mount_node = this.get_update_mount_node(anchor);
@ -569,8 +570,19 @@ export default class IfBlockWrapper extends Wrapper {
block.chunks.update.push(b`
if (${branch.condition}) ${name}.p(#ctx, #dirty);
`);
} else {
initial = x`${branch.block.name}(#ctx)`;
const initial_mount_node = parent_node || '#target';
const anchor_node = parent_node ? 'null' : 'anchor';
block.chunks.mount.push(
b`if (${name}) ${name}.m(${initial_mount_node}, ${anchor_node});`
);
}
block.add_variable(name, initial);
if (if_exists_condition) {
block.chunks.destroy.push(b`
if (${if_exists_condition}) ${name}.d(${detaching});

Loading…
Cancel
Save