@@ -11,54 +11,31 @@ var Observer = require('../observer'),
11
11
var mutationHandlers = {
12
12
13
13
push : function ( m ) {
14
- var i = 0 , l = m . args . length , vm ,
15
- base = this . collection . length - l
16
- for ( ; i < l ; i ++ ) {
17
- vm = this . buildItem ( m . args [ i ] , base + i )
18
- this . updateObject ( vm , 1 )
19
- }
14
+ this . addItems ( m . args , this . vms . length )
20
15
} ,
21
16
22
17
pop : function ( ) {
23
18
var vm = this . vms . pop ( )
24
- if ( vm ) {
25
- vm . $destroy ( )
26
- this . updateObject ( vm , - 1 )
27
- }
19
+ if ( vm ) this . removeItems ( [ vm ] )
28
20
} ,
29
21
30
22
unshift : function ( m ) {
31
- var i = 0 , l = m . args . length , vm
32
- for ( ; i < l ; i ++ ) {
33
- vm = this . buildItem ( m . args [ i ] , i )
34
- this . updateObject ( vm , 1 )
35
- }
23
+ this . addItems ( m . args )
36
24
} ,
37
25
38
26
shift : function ( ) {
39
27
var vm = this . vms . shift ( )
40
- if ( vm ) {
41
- vm . $destroy ( )
42
- this . updateObject ( vm , - 1 )
43
- }
28
+ if ( vm ) this . removeItems ( [ vm ] )
44
29
} ,
45
30
46
31
splice : function ( m ) {
47
- var i , l , vm ,
48
- index = m . args [ 0 ] ,
32
+ var index = m . args [ 0 ] ,
49
33
removed = m . args [ 1 ] ,
50
- added = m . args . length - 2 ,
51
34
removedVMs = removed === undefined
52
35
? this . vms . splice ( index )
53
36
: this . vms . splice ( index , removed )
54
- for ( i = 0 , l = removedVMs . length ; i < l ; i ++ ) {
55
- removedVMs [ i ] . $destroy ( )
56
- this . updateObject ( removedVMs [ i ] , - 1 )
57
- }
58
- for ( i = 0 ; i < added ; i ++ ) {
59
- vm = this . buildItem ( m . args [ i + 2 ] , index + i )
60
- this . updateObject ( vm , 1 )
61
- }
37
+ this . removeItems ( removedVMs )
38
+ this . addItems ( m . args . slice ( 2 ) , index )
62
39
} ,
63
40
64
41
sort : function ( ) {
@@ -170,7 +147,7 @@ module.exports = {
170
147
171
148
// create new VMs and append to DOM
172
149
if ( collection . length ) {
173
- collection . forEach ( this . buildItem , this )
150
+ collection . forEach ( this . build , this )
174
151
if ( ! init ) this . changed ( )
175
152
}
176
153
@@ -179,6 +156,22 @@ module.exports = {
179
156
this . old = this . oldVMs = null
180
157
} ,
181
158
159
+ addItems : function ( data , base ) {
160
+ base = base || 0
161
+ for ( var i = 0 , l = data . length ; i < l ; i ++ ) {
162
+ var vm = this . build ( data [ i ] , base + i )
163
+ this . updateObject ( vm , 1 )
164
+ }
165
+ } ,
166
+
167
+ removeItems : function ( data ) {
168
+ var i = data . length
169
+ while ( i -- ) {
170
+ data [ i ] . $destroy ( )
171
+ this . updateObject ( data [ i ] , - 1 )
172
+ }
173
+ } ,
174
+
182
175
/**
183
176
* Notify parent compiler that new items
184
177
* have been added to the collection, it needs
@@ -197,7 +190,7 @@ module.exports = {
197
190
} ,
198
191
199
192
/**
200
- * Run a dry buildItem just to collect bindings
193
+ * Run a dry build just to collect bindings
201
194
*/
202
195
dryBuild : function ( ) {
203
196
new this . Ctor ( {
@@ -215,7 +208,7 @@ module.exports = {
215
208
* passing along compiler options indicating this
216
209
* is a v-repeat item.
217
210
*/
218
- buildItem : function ( data , index ) {
211
+ build : function ( data , index ) {
219
212
220
213
var ctn = this . container ,
221
214
vms = this . vms ,
0 commit comments