@@ -290,7 +290,7 @@ export default class Component extends Node {
290
290
}
291
291
292
292
statements . push ( deindent `
293
- if (${ binding . prop } in ${ binding . obj } ) {
293
+ if (${ binding . value . snippet } !== void 0 ) {
294
294
${ name_initial_data } .${ binding . name } = ${ binding . value . snippet } ;
295
295
${ name_updating } .${ binding . name } = true;
296
296
}`
@@ -304,7 +304,7 @@ export default class Component extends Node {
304
304
updates . push ( deindent `
305
305
if (!${ name_updating } .${ binding . name } && ${ [ ...binding . value . dependencies ] . map ( ( dependency : string ) => `changed.${ dependency } ` ) . join ( ' || ' ) } ) {
306
306
${ name_changes } .${ binding . name } = ${ binding . value . snippet } ;
307
- ${ name_updating } .${ binding . name } = true ;
307
+ ${ name_updating } .${ binding . name } = ${ binding . value . snippet } !== void 0 ;
308
308
}
309
309
` ) ;
310
310
} ) ;
@@ -318,7 +318,7 @@ export default class Component extends Node {
318
318
319
319
// TODO use component.on('state', ...) instead of _bind
320
320
componentInitProperties . push ( deindent `
321
- _bind: function (changed, childState) {
321
+ _bind(changed, childState) {
322
322
var ${ initialisers } ;
323
323
${ builder }
324
324
${ hasStoreBindings && `#component.store.set(newStoreState);` }
@@ -328,7 +328,7 @@ export default class Component extends Node {
328
328
` ) ;
329
329
330
330
beforecreate = deindent `
331
- #component.root._beforecreate.push(function() {
331
+ #component.root._beforecreate.push(() => {
332
332
${ name } ._bind({ ${ this . bindings . map ( b => `${ b . name } : 1` ) . join ( ', ' ) } }, ${ name } .get());
333
333
});
334
334
` ;
@@ -406,6 +406,14 @@ export default class Component extends Node {
406
406
407
407
if (${ switch_value } ) {
408
408
${ name } = new ${ switch_value } (${ switch_props } (ctx));
409
+
410
+ ${ this . bindings . length > 0 && deindent `
411
+ #component.root._beforecreate.push(() => {
412
+ const changed = {};
413
+ ${ this . bindings . map ( binding => deindent `
414
+ if (${ binding . value . snippet } === void 0) changed.${ binding . name } = 1;` ) }
415
+ ${ name } ._bind(changed, ${ name } .get());
416
+ });` }
409
417
${ name } ._fragment.c();
410
418
411
419
${ this . children . map ( child => child . remount ( name ) ) }
@@ -554,8 +562,8 @@ export default class Component extends Node {
554
562
555
563
const expression = (
556
564
this . name === 'svelte:self' ? this . compiler . name :
557
- isDynamicComponent ? `((${ this . expression . snippet } ) || @missingComponent)` :
558
- `%components-${ this . name } `
565
+ ( isDynamicComponent ? `((${ this . expression . snippet } ) || @missingComponent)` :
566
+ `%components-${ this . name } ` )
559
567
) ;
560
568
561
569
this . bindings . forEach ( binding => {
0 commit comments