@@ -11,10 +11,21 @@ export default function createBinding ( generator, node, attribute, current, loc
11
11
if ( contextual ) local . allUsedContexts . add ( parts [ 0 ] ) ;
12
12
13
13
if ( local . isComponent ) {
14
- local . bindings . push ( {
15
- name : attribute . name ,
16
- value : contextual ? attribute . value : `root.${ attribute . value } `
17
- } ) ;
14
+ let obj ;
15
+ let prop ;
16
+ let value ;
17
+
18
+ if ( contextual ) {
19
+ obj = current . listNames [ parts [ 0 ] ] ;
20
+ prop = current . indexNames [ parts [ 0 ] ] ;
21
+ value = attribute . value ;
22
+ } else {
23
+ prop = `'${ parts . slice ( - 1 ) } '` ;
24
+ obj = parts . length > 1 ? `root.${ parts . slice ( 0 , - 1 ) . join ( '.' ) } ` : `root` ;
25
+ value = `root.${ attribute . value } ` ;
26
+ }
27
+
28
+ local . bindings . push ( { name : attribute . name , value, obj, prop } ) ;
18
29
}
19
30
20
31
const handler = current . getUniqueName ( `${ local . name } ChangeHandler` ) ;
@@ -59,9 +70,11 @@ export default function createBinding ( generator, node, attribute, current, loc
59
70
const listName = current . listNames [ parts [ 0 ] ] ;
60
71
const indexName = current . indexNames [ parts [ 0 ] ] ;
61
72
73
+ const context = local . isComponent ? `_context` : `__svelte` ;
74
+
62
75
setter = deindent `
63
- var list = this.__svelte .${ listName } ;
64
- var index = this.__svelte .${ indexName } ;
76
+ var list = this.${ context } .${ listName } ;
77
+ var index = this.${ context } .${ indexName } ;
65
78
list[index]${ parts . slice ( 1 ) . map ( part => `.${ part } ` ) . join ( '' ) } = ${ value } ;
66
79
67
80
component._set({ ${ prop } : component.get( '${ prop } ' ) });
0 commit comments