@@ -6,21 +6,29 @@ function isElseIf ( node ) {
6
6
7
7
const preprocessors = {
8
8
MustacheTag : ( generator , block , node ) => {
9
- const { dependencies } = block . contextualise ( node . expression ) ;
9
+ const dependencies = block . findDependencies ( node . expression ) ;
10
10
block . addDependencies ( dependencies ) ;
11
11
} ,
12
12
13
13
IfBlock : ( generator , block , node ) => {
14
+ const blocks = [ ] ;
15
+ let dynamic = false ;
16
+
14
17
function attachBlocks ( node ) {
15
- const { dependencies } = block . contextualise ( node . expression ) ;
18
+ const dependencies = block . findDependencies ( node . expression ) ;
16
19
block . addDependencies ( dependencies ) ;
17
20
18
21
node . _block = block . child ( {
19
22
name : generator . getUniqueName ( `create_if_block` )
20
23
} ) ;
21
24
25
+ blocks . push ( node . _block ) ;
22
26
preprocessChildren ( generator , node . _block , node . children ) ;
23
- block . addDependencies ( node . _block . dependencies ) ;
27
+
28
+ if ( node . _block . dependencies . size > 0 ) {
29
+ dynamic = true ;
30
+ block . addDependencies ( node . _block . dependencies ) ;
31
+ }
24
32
25
33
if ( isElseIf ( node . else ) ) {
26
34
attachBlocks ( node . else . children [ 0 ] ) ;
@@ -29,16 +37,27 @@ const preprocessors = {
29
37
name : generator . getUniqueName ( `create_if_block` )
30
38
} ) ;
31
39
40
+ blocks . push ( node . else . _block ) ;
32
41
preprocessChildren ( generator , node . else . _block , node . else . children ) ;
33
- block . addDependencies ( node . else . _block . dependencies ) ;
42
+
43
+ if ( node . else . _block . dependencies . size > 0 ) {
44
+ dynamic = true ;
45
+ block . addDependencies ( node . else . _block . dependencies ) ;
46
+ }
34
47
}
35
48
}
36
49
37
50
attachBlocks ( node ) ;
51
+
52
+ blocks . forEach ( block => {
53
+ block . hasUpdateMethod = dynamic ;
54
+ } ) ;
55
+
56
+ generator . blocks . push ( ...blocks ) ;
38
57
} ,
39
58
40
59
EachBlock : ( generator , block , node ) => {
41
- const { dependencies } = block . contextualise ( node . expression ) ;
60
+ const dependencies = block . findDependencies ( node . expression ) ;
42
61
block . addDependencies ( dependencies ) ;
43
62
44
63
const indexNames = new Map ( block . indexNames ) ;
@@ -77,15 +96,19 @@ const preprocessors = {
77
96
params : block . params . concat ( listName , context , indexName )
78
97
} ) ;
79
98
99
+ generator . blocks . push ( node . _block ) ;
80
100
preprocessChildren ( generator , node . _block , node . children ) ;
81
101
block . addDependencies ( node . _block . dependencies ) ;
102
+ node . _block . hasUpdateMethod = node . _block . dependencies . size > 0 ;
82
103
83
104
if ( node . else ) {
84
105
node . else . _block = block . child ( {
85
106
name : generator . getUniqueName ( `${ node . _block . name } _else` )
86
107
} ) ;
87
108
109
+ generator . blocks . push ( node . else . _block ) ;
88
110
preprocessChildren ( generator , node . else . _block , node . else . children ) ;
111
+ node . else . _block . hasUpdateMethod = node . else . _block . dependencies . size > 0 ;
89
112
}
90
113
} ,
91
114
@@ -94,14 +117,14 @@ const preprocessors = {
94
117
if ( attribute . type === 'Attribute' && attribute . value !== true ) {
95
118
attribute . value . forEach ( chunk => {
96
119
if ( chunk . type !== 'Text' ) {
97
- const { dependencies } = block . contextualise ( chunk . expression ) ;
120
+ const dependencies = block . findDependencies ( chunk . expression ) ;
98
121
block . addDependencies ( dependencies ) ;
99
122
}
100
123
} ) ;
101
124
}
102
125
103
126
else if ( attribute . type === 'Binding' ) {
104
- const { dependencies } = block . contextualise ( attribute . value ) ;
127
+ const dependencies = block . findDependencies ( attribute . value ) ;
105
128
block . addDependencies ( dependencies ) ;
106
129
}
107
130
} ) ;
@@ -115,7 +138,10 @@ const preprocessors = {
115
138
name : generator . getUniqueName ( `create_${ name } _yield_fragment` )
116
139
} ) ;
117
140
141
+ generator . blocks . push ( node . _block ) ;
118
142
preprocessChildren ( generator , node . _block , node . children ) ;
143
+ block . addDependencies ( node . _block . dependencies ) ;
144
+ node . _block . hasUpdateMethod = node . _block . dependencies . size > 0 ;
119
145
}
120
146
121
147
else {
@@ -141,6 +167,7 @@ export default function preprocess ( generator, children ) {
141
167
142
168
contexts : new Map ( ) ,
143
169
indexes : new Map ( ) ,
170
+ contextDependencies : new Map ( ) ,
144
171
145
172
params : [ 'root' ] ,
146
173
indexNames : new Map ( ) ,
@@ -149,7 +176,9 @@ export default function preprocess ( generator, children ) {
149
176
dependencies : new Set ( )
150
177
} ) ;
151
178
179
+ generator . blocks . push ( block ) ;
152
180
preprocessChildren ( generator , block , children ) ;
181
+ block . hasUpdateMethod = block . dependencies . size > 0 ;
153
182
154
183
return block ;
155
184
}
0 commit comments