@@ -12,39 +12,40 @@ var Observer = require('../observer'),
1212var mutationHandlers = {
1313
1414 push : function ( m ) {
15- var l = m . args . length ,
15+ var i = 0 , l = m . args . length , vm ,
1616 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 )
2020 }
2121 } ,
2222
2323 pop : function ( ) {
2424 var vm = this . vms . pop ( )
2525 if ( vm ) {
2626 vm . $destroy ( )
27- this . updateObject ( vm . $data , - 1 )
27+ this . updateObject ( vm , - 1 )
2828 }
2929 } ,
3030
3131 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 )
3536 }
3637 } ,
3738
3839 shift : function ( ) {
3940 var vm = this . vms . shift ( )
4041 if ( vm ) {
4142 vm . $destroy ( )
42- this . updateObject ( vm . $data , - 1 )
43+ this . updateObject ( vm , - 1 )
4344 }
4445 } ,
4546
4647 splice : function ( m ) {
47- var i , l ,
48+ var i , l , vm ,
4849 index = m . args [ 0 ] ,
4950 removed = m . args [ 1 ] ,
5051 added = m . args . length - 2 ,
@@ -53,11 +54,11 @@ var mutationHandlers = {
5354 : this . vms . splice ( index , removed )
5455 for ( i = 0 , l = removedVMs . length ; i < l ; i ++ ) {
5556 removedVMs [ i ] . $destroy ( )
56- this . updateObject ( removedVMs [ i ] . $data , - 1 )
57+ this . updateObject ( removedVMs [ i ] , - 1 )
5758 }
5859 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 )
6162 }
6263 } ,
6364
@@ -151,7 +152,7 @@ module.exports = {
151152 // update index
152153 var i = arr . length
153154 while ( i -- ) {
154- arr [ i ] . $index = i
155+ self . vms [ i ] . $index = i
155156 }
156157 }
157158 if ( method === 'push' || method === 'unshift' || method === 'splice' ) {
@@ -264,8 +265,6 @@ module.exports = {
264265 // mark, so it won't be destroyed
265266 item . $reused = true
266267 el = item . $el
267- // don't forget to update index
268- data . $index = index
269268 // existing VM's el can possibly be detached by v-if.
270269 // in that case don't insert.
271270 detached = ! el . parentNode
@@ -282,8 +281,6 @@ module.exports = {
282281 primitive = true
283282 data = { $value : data }
284283 }
285- // define index
286- def ( data , '$index' , index )
287284
288285 }
289286
@@ -318,6 +315,7 @@ module.exports = {
318315 delegator : ctn
319316 }
320317 } )
318+ item . $index = index
321319
322320 if ( ! data ) {
323321 // this is a forced compile for an empty collection.
@@ -327,13 +325,15 @@ module.exports = {
327325 vms . splice ( index , 0 , item )
328326 // for primitive values, listen for value change
329327 if ( primitive ) {
330- data . __emitter__ . on ( 'set' , function ( key , val ) {
328+ item . $compiler . observer . on ( 'set' , function ( key , val ) {
331329 if ( key === '$value' ) {
332330 col [ item . $index ] = val
333331 }
334332 } )
335333 }
336334 }
335+
336+ return item
337337 } ,
338338
339339 /**
@@ -355,18 +355,15 @@ module.exports = {
355355 var self = this
356356 this . updateRepeater = function ( key , val ) {
357357 if ( key . indexOf ( '.' ) === - 1 ) {
358- var i = collection . length , item
358+ var i = self . vms . length , item
359359 while ( i -- ) {
360- item = collection [ i ]
360+ item = self . vms [ i ]
361361 if ( item . $key === key ) {
362- if ( item !== val && item . $value !== val ) {
362+ if ( item . $data !== val && item . $value !== val ) {
363363 if ( '$value' in item ) {
364364 item . $value = val
365365 } else {
366- def ( val , '$key' , key )
367- self . lock = true
368- collection . set ( i , val )
369- self . lock = false
366+ item . $data = val
370367 }
371368 }
372369 break
@@ -380,19 +377,17 @@ module.exports = {
380377 } ,
381378
382379 /**
383- * Sync changes in the $repeater Array
380+ * Sync changes from the $repeater Array
384381 * back to the represented Object
385382 */
386- updateObject : function ( data , action ) {
387- if ( this . lock ) return
383+ updateObject : function ( vm , action ) {
388384 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
392388 if ( action > 0 ) { // new property
393389 // make key ienumerable
394- delete data . $key
395- def ( data , '$key' , key )
390+ delete vm . $data . $key
396391 obj [ key ] = val
397392 Observer . convert ( obj , key )
398393 } else {
0 commit comments