@@ -2,14 +2,14 @@ import deindent from '../../../utils/deindent.js';
2
2
import isReference from '../../../utils/isReference.js' ;
3
3
import flattenReference from '../../../utils/flattenReference.js' ;
4
4
5
- export default function createBinding ( node , name , attribute , current , initStatements , updateStatements , teardownStatements , allUsedContexts ) {
5
+ export default function createBinding ( node , attribute , current , local ) {
6
6
const parts = attribute . value . split ( '.' ) ;
7
7
8
8
const deep = parts . length > 1 ;
9
9
const contextual = parts [ 0 ] in current . contexts ;
10
- if ( contextual ) allUsedContexts . add ( parts [ 0 ] ) ;
10
+ if ( contextual ) local . allUsedContexts . add ( parts [ 0 ] ) ;
11
11
12
- const handler = current . counter ( `${ name } ChangeHandler` ) ;
12
+ const handler = current . counter ( `${ local . name } ChangeHandler` ) ;
13
13
let setter ;
14
14
15
15
let eventName = 'change' ;
@@ -54,26 +54,43 @@ export default function createBinding ( node, name, attribute, current, initStat
54
54
component.set({ ${ parts [ 0 ] } : ${ parts [ 0 ] } });
55
55
` ;
56
56
} else {
57
- setter = `component.set({ ${ attribute . value } : ${ name } .${ attribute . name } });` ;
57
+ const value = local . isComponent ? `value` : `${ local . name } .${ attribute . name } ` ;
58
+ setter = `component.set({ ${ attribute . value } : ${ value } });` ;
58
59
}
59
60
60
- initStatements . push ( deindent `
61
- var ${ name } _updating = false;
61
+ if ( local . isComponent ) {
62
+ local . init . push ( deindent `
63
+ var ${ local . name } _updating = false;
62
64
63
- function ${ handler } () {
64
- ${ name } _updating = true;
65
- ${ setter }
66
- ${ name } _updating = false;
67
- }
65
+ ${ local . name } .observe( '${ attribute . name } ', function ( value ) {
66
+ ${ local . name } _updating = true;
67
+ ${ setter }
68
+ ${ local . name } _updating = false;
69
+ });
70
+ ` ) ;
71
+
72
+ local . update . push ( deindent `
73
+ if ( !${ local . name } _updating ) ${ local . name } .set({ ${ attribute . name } : ${ contextual ? attribute . value : `root.${ attribute . value } ` } });
74
+ ` ) ;
75
+ } else {
76
+ local . init . push ( deindent `
77
+ var ${ local . name } _updating = false;
68
78
69
- ${ name } .addEventListener( '${ eventName } ', ${ handler } , false );
70
- ` ) ;
79
+ function ${ handler } () {
80
+ ${ local . name } _updating = true;
81
+ ${ setter }
82
+ ${ local . name } _updating = false;
83
+ }
84
+
85
+ ${ local . name } .addEventListener( '${ eventName } ', ${ handler } , false );
86
+ ` ) ;
71
87
72
- updateStatements . push ( deindent `
73
- if ( !${ name } _updating ) ${ name } .${ attribute . name } = ${ contextual ? attribute . value : `root.${ attribute . value } ` }
74
- ` ) ;
88
+ local . update . push ( deindent `
89
+ if ( !${ local . name } _updating ) ${ local . name } .${ attribute . name } = ${ contextual ? attribute . value : `root.${ attribute . value } ` }
90
+ ` ) ;
75
91
76
- teardownStatements . push ( deindent `
77
- ${ name } .removeEventListener( '${ eventName } ', ${ handler } , false );
78
- ` ) ;
92
+ local . teardown . push ( deindent `
93
+ ${ local . name } .removeEventListener( '${ eventName } ', ${ handler } , false );
94
+ ` ) ;
95
+ }
79
96
}
0 commit comments