@@ -102,9 +102,16 @@ function genCheckboxModel(node, attrName, value, output) {
102
102
${ expValue } = checked ? ${ trueValueBinding } : ${ falseValueBinding }
103
103
}`
104
104
105
- addAttr ( output . result , attrName , eval ( `(function() {${ attrCheckedCode } })` ) )
106
- addHandler ( output . result , 'change' , eval ( `(function(evt) {${ eventChangeCode } })` ) )
107
-
105
+ const isCard = output . isCard
106
+ const isLite = output . isLite
107
+ if ( isCard && ! isLite ) {
108
+ addAttr ( output . result , attrName , `(function() {${ attrCheckedCode } })` )
109
+ addAttr ( output . result , attrName + 'Raw' , value )
110
+ addHandler ( output . result , 'change' , `function(evt) {${ eventChangeCode } }` )
111
+ } else {
112
+ addAttr ( output . result , attrName , eval ( `(function() {${ attrCheckedCode } })` ) )
113
+ addHandler ( output . result , 'change' , eval ( `(function(evt) {${ eventChangeCode } })` ) )
114
+ }
108
115
return {
109
116
attr : { checked : attrCheckedCode } ,
110
117
events : { change : eventChangeCode }
@@ -125,8 +132,16 @@ function genRadioModel(node, attrName, value, output) {
125
132
const attrCheckedCode = `return ${ exp ( value , false ) } === ${ valueBinding } `
126
133
const eventChangeCode = `${ exp ( value , false ) } = ${ valueBinding } `
127
134
128
- addAttr ( output . result , attrName , eval ( `(function() {${ attrCheckedCode } })` ) )
129
- addHandler ( output . result , 'change' , eval ( `(function(evt) {${ eventChangeCode } })` ) )
135
+ const isCard = output . isCard
136
+ const isLite = output . isLite
137
+ if ( isCard && ! isLite ) {
138
+ addAttr ( output . result , attrName , `(function() {${ attrCheckedCode } })` )
139
+ addAttr ( output . result , attrName + 'Raw' , value )
140
+ addHandler ( output . result , 'change' , `function(evt) {${ eventChangeCode } }` )
141
+ } else {
142
+ addAttr ( output . result , attrName , eval ( `(function() {${ attrCheckedCode } })` ) )
143
+ addHandler ( output . result , 'change' , eval ( `(function(evt) {${ eventChangeCode } })` ) )
144
+ }
130
145
131
146
return {
132
147
attr : { checked : attrCheckedCode } ,
@@ -140,11 +155,17 @@ function genRadioModel(node, attrName, value, output) {
140
155
* @param {object } output 构建的输出结果
141
156
*/
142
157
function genSelectModel ( value , output ) {
143
- addHandler (
144
- output . result ,
145
- 'change' ,
146
- eval ( `(function(evt) { ${ exp ( value , false ) } = evt.newValue})` )
147
- )
158
+ const isCard = output . isCard
159
+ const isLite = output . isLite
160
+ if ( isCard && ! isLite ) {
161
+ addHandler ( output . result , 'change' , `function(evt) { ${ exp ( value , false ) } = evt.newValue}` )
162
+ } else {
163
+ addHandler (
164
+ output . result ,
165
+ 'change' ,
166
+ eval ( `(function(evt) { ${ exp ( value , false ) } = evt.newValue})` )
167
+ )
168
+ }
148
169
}
149
170
150
171
/**
@@ -156,10 +177,16 @@ function genSelectModel(value, output) {
156
177
*/
157
178
function genDefaultModel ( attrName , value , output ) {
158
179
const eventChangeCode = `${ exp ( value , false ) } = evt.target.value`
159
-
160
- addAttr ( output . result , attrName , exp ( value ) )
161
- addHandler ( output . result , 'change' , eval ( `(function(evt) {${ eventChangeCode } })` ) )
162
-
180
+ const isCard = output . isCard
181
+ const isLite = output . isLite
182
+ if ( isCard && ! isLite ) {
183
+ addAttr ( output . result , attrName , exp ( value , true , isLite , isCard ) )
184
+ addAttr ( output . result , attrName + 'Raw' , value )
185
+ addHandler ( output . result , 'change' , `function(evt) {${ eventChangeCode } }` )
186
+ } else {
187
+ addAttr ( output . result , attrName , exp ( value ) )
188
+ addHandler ( output . result , 'change' , eval ( `(function(evt) {${ eventChangeCode } })` ) )
189
+ }
163
190
return { events : { change : eventChangeCode } }
164
191
}
165
192
@@ -176,12 +203,22 @@ function genComponentModel(node, attrName, value, output, locationInfo, options)
176
203
// 自定义组件model指令绑定的属性,依然作为普通属性处理
177
204
validator . checkAttr ( attrName , value , output , node . tagName , locationInfo , options )
178
205
179
- // 为自定义组件绑定update:${attrName}事件,接收组件内部emit的update:${attrName}事件
180
- addHandler (
181
- output . result ,
182
- `update:${ attrName } ` ,
183
- eval ( `(function(evt) { ${ exp ( value , false ) } = evt.detail})` )
184
- )
206
+ const isCard = output . isCard
207
+ const isLite = output . isLite
208
+ if ( isCard && ! isLite ) {
209
+ addHandler (
210
+ output . result ,
211
+ `update:${ attrName } ` ,
212
+ `function(evt) { ${ exp ( value , false ) } = evt.detail}`
213
+ )
214
+ } else {
215
+ // 为自定义组件绑定update:${attrName}事件,接收组件内部emit的update:${attrName}事件
216
+ addHandler (
217
+ output . result ,
218
+ `update:${ attrName } ` ,
219
+ eval ( `(function(evt) { ${ exp ( value , false ) } = evt.detail})` )
220
+ )
221
+ }
185
222
}
186
223
187
224
/**
@@ -196,40 +233,76 @@ function genDynamicModel(node, attrName, value, output, expType) {
196
233
const checkboxCode = genCheckboxModel ( node , attrName , value , output )
197
234
const radioCode = genRadioModel ( node , attrName , value , output )
198
235
const textCode = genDefaultModel ( attrName , value , output )
236
+ const isCard = output . isCard
237
+ const isLite = output . isLite
238
+ if ( isCard && ! isLite ) {
239
+ addAttr ( output . result , attrName , exp ( value , true , isLite , isCard ) )
240
+ addAttr ( output . result , attrName + 'Raw' , value )
199
241
200
- addAttr ( output . result , attrName , exp ( value ) )
242
+ addAttr (
243
+ output . result ,
244
+ 'checked' ,
245
+ `(function() {
246
+ if (${ expType } === 'checkbox') {
247
+ ${ checkboxCode . attr . checked }
248
+ } else if (${ expType } === 'radio') {
249
+ ${ radioCode . attr . checked }
250
+ } else {
251
+ return false
252
+ }
253
+ })
254
+ `
255
+ )
201
256
202
- addAttr (
203
- output . result ,
204
- 'checked' ,
205
- eval ( `
206
- (function() {
207
- if (${ expType } === 'checkbox') {
208
- ${ checkboxCode . attr . checked }
209
- } else if (${ expType } === 'radio') {
210
- ${ radioCode . attr . checked }
211
- } else {
212
- return false
213
- }
214
- })
215
- ` )
216
- )
257
+ addAttr ( output . result , 'checkedRaw' , value )
258
+ addHandler (
259
+ output . result ,
260
+ 'change' ,
261
+ `function(evt) {
262
+ if (${ expType } === 'checkbox') {
263
+ ${ checkboxCode . events . change }
264
+ } else if (${ expType } === 'radio') {
265
+ ${ radioCode . events . change }
266
+ } else {
267
+ ${ textCode . events . change }
268
+ }
269
+ }`
270
+ )
271
+ } else {
272
+ addAttr ( output . result , attrName , exp ( value ) )
217
273
218
- addHandler (
219
- output . result ,
220
- 'change' ,
221
- eval ( `
222
- (function(evt) {
223
- if (${ expType } === 'checkbox') {
224
- ${ checkboxCode . events . change }
225
- } else if (${ expType } === 'radio') {
226
- ${ radioCode . events . change }
227
- } else {
228
- ${ textCode . events . change }
229
- }
230
- })
231
- ` )
232
- )
274
+ addAttr (
275
+ output . result ,
276
+ 'checked' ,
277
+ eval ( `
278
+ (function() {
279
+ if (${ expType } === 'checkbox') {
280
+ ${ checkboxCode . attr . checked }
281
+ } else if (${ expType } === 'radio') {
282
+ ${ radioCode . attr . checked }
283
+ } else {
284
+ return false
285
+ }
286
+ })
287
+ ` )
288
+ )
289
+
290
+ addHandler (
291
+ output . result ,
292
+ 'change' ,
293
+ eval ( `
294
+ (function(evt) {
295
+ if (${ expType } === 'checkbox') {
296
+ ${ checkboxCode . events . change }
297
+ } else if (${ expType } === 'radio') {
298
+ ${ radioCode . events . change }
299
+ } else {
300
+ ${ textCode . events . change }
301
+ }
302
+ })
303
+ ` )
304
+ )
305
+ }
233
306
}
234
307
235
308
/**
0 commit comments