@@ -12,39 +12,40 @@ var Observer = require('../observer'),
12
12
var mutationHandlers = {
13
13
14
14
push : function ( m ) {
15
- var l = m . args . length ,
15
+ var i = 0 , l = m . args . length , vm ,
16
16
base = this . collection . length - l
17
- for ( var i = 0 ; i < l ; i ++ ) {
18
- this . buildItem ( m . args [ i ] , base + i )
19
- this . updateObject ( m . args [ i ] , 1 )
17
+ for ( ; i < l ; i ++ ) {
18
+ vm = this . buildItem ( m . args [ i ] , base + i )
19
+ this . updateObject ( vm , 1 )
20
20
}
21
21
} ,
22
22
23
23
pop : function ( ) {
24
24
var vm = this . vms . pop ( )
25
25
if ( vm ) {
26
26
vm . $destroy ( )
27
- this . updateObject ( vm . $data , - 1 )
27
+ this . updateObject ( vm , - 1 )
28
28
}
29
29
} ,
30
30
31
31
unshift : function ( m ) {
32
- for ( var i = 0 , l = m . args . length ; i < l ; i ++ ) {
33
- this . buildItem ( m . args [ i ] , i )
34
- this . updateObject ( m . args [ i ] , 1 )
32
+ var i = 0 , l = m . args . length , vm
33
+ for ( ; i < l ; i ++ ) {
34
+ vm = this . buildItem ( m . args [ i ] , i )
35
+ this . updateObject ( vm , 1 )
35
36
}
36
37
} ,
37
38
38
39
shift : function ( ) {
39
40
var vm = this . vms . shift ( )
40
41
if ( vm ) {
41
42
vm . $destroy ( )
42
- this . updateObject ( vm . $data , - 1 )
43
+ this . updateObject ( vm , - 1 )
43
44
}
44
45
} ,
45
46
46
47
splice : function ( m ) {
47
- var i , l ,
48
+ var i , l , vm ,
48
49
index = m . args [ 0 ] ,
49
50
removed = m . args [ 1 ] ,
50
51
added = m . args . length - 2 ,
@@ -53,11 +54,11 @@ var mutationHandlers = {
53
54
: this . vms . splice ( index , removed )
54
55
for ( i = 0 , l = removedVMs . length ; i < l ; i ++ ) {
55
56
removedVMs [ i ] . $destroy ( )
56
- this . updateObject ( removedVMs [ i ] . $data , - 1 )
57
+ this . updateObject ( removedVMs [ i ] , - 1 )
57
58
}
58
59
for ( i = 0 ; i < added ; i ++ ) {
59
- this . buildItem ( m . args [ i + 2 ] , index + i )
60
- this . updateObject ( m . args [ i + 2 ] , 1 )
60
+ vm = this . buildItem ( m . args [ i + 2 ] , index + i )
61
+ this . updateObject ( vm , 1 )
61
62
}
62
63
} ,
63
64
@@ -151,7 +152,7 @@ module.exports = {
151
152
// update index
152
153
var i = arr . length
153
154
while ( i -- ) {
154
- arr [ i ] . $index = i
155
+ self . vms [ i ] . $index = i
155
156
}
156
157
}
157
158
if ( method === 'push' || method === 'unshift' || method === 'splice' ) {
@@ -264,8 +265,6 @@ module.exports = {
264
265
// mark, so it won't be destroyed
265
266
item . $reused = true
266
267
el = item . $el
267
- // don't forget to update index
268
- data . $index = index
269
268
// existing VM's el can possibly be detached by v-if.
270
269
// in that case don't insert.
271
270
detached = ! el . parentNode
@@ -282,8 +281,6 @@ module.exports = {
282
281
primitive = true
283
282
data = { $value : data }
284
283
}
285
- // define index
286
- def ( data , '$index' , index )
287
284
288
285
}
289
286
@@ -318,6 +315,7 @@ module.exports = {
318
315
delegator : ctn
319
316
}
320
317
} )
318
+ item . $index = index
321
319
322
320
if ( ! data ) {
323
321
// this is a forced compile for an empty collection.
@@ -327,13 +325,15 @@ module.exports = {
327
325
vms . splice ( index , 0 , item )
328
326
// for primitive values, listen for value change
329
327
if ( primitive ) {
330
- data . __emitter__ . on ( 'set' , function ( key , val ) {
328
+ item . $compiler . observer . on ( 'set' , function ( key , val ) {
331
329
if ( key === '$value' ) {
332
330
col [ item . $index ] = val
333
331
}
334
332
} )
335
333
}
336
334
}
335
+
336
+ return item
337
337
} ,
338
338
339
339
/**
@@ -355,18 +355,15 @@ module.exports = {
355
355
var self = this
356
356
this . updateRepeater = function ( key , val ) {
357
357
if ( key . indexOf ( '.' ) === - 1 ) {
358
- var i = collection . length , item
358
+ var i = self . vms . length , item
359
359
while ( i -- ) {
360
- item = collection [ i ]
360
+ item = self . vms [ i ]
361
361
if ( item . $key === key ) {
362
- if ( item !== val && item . $value !== val ) {
362
+ if ( item . $data !== val && item . $value !== val ) {
363
363
if ( '$value' in item ) {
364
364
item . $value = val
365
365
} else {
366
- def ( val , '$key' , key )
367
- self . lock = true
368
- collection . set ( i , val )
369
- self . lock = false
366
+ item . $data = val
370
367
}
371
368
}
372
369
break
@@ -380,19 +377,17 @@ module.exports = {
380
377
} ,
381
378
382
379
/**
383
- * Sync changes in the $repeater Array
380
+ * Sync changes from the $repeater Array
384
381
* back to the represented Object
385
382
*/
386
- updateObject : function ( data , action ) {
387
- if ( this . lock ) return
383
+ updateObject : function ( vm , action ) {
388
384
var obj = this . object
389
- if ( obj && data . $key ) {
390
- var key = data . $key ,
391
- val = data . $value || data
385
+ if ( obj && vm . $key ) {
386
+ var key = vm . $key ,
387
+ val = vm . $value || vm . $ data
392
388
if ( action > 0 ) { // new property
393
389
// make key ienumerable
394
- delete data . $key
395
- def ( data , '$key' , key )
390
+ delete vm . $data . $key
396
391
obj [ key ] = val
397
392
Observer . convert ( obj , key )
398
393
} else {
0 commit comments