@@ -75,7 +75,7 @@ function watchMutation (method) {
75
75
unlinkArrayElements ( this , removed )
76
76
77
77
// emit the mutation event
78
- this . __emitter__ . emit ( 'mutate' , null , this , {
78
+ this . __emitter__ . emit ( 'mutate' , '' , this , {
79
79
method : method ,
80
80
args : args ,
81
81
result : result ,
@@ -167,19 +167,29 @@ function convert (obj) {
167
167
if ( obj . __emitter__ ) return true
168
168
var emitter = new Emitter ( )
169
169
def ( obj , '__emitter__' , emitter )
170
- emitter . on ( 'set' , function ( key , val , propagate ) {
171
- if ( ! propagate ) return
172
- var owners = obj . __emitter__ . owners ,
173
- i = owners . length
174
- while ( i -- ) {
175
- owners [ i ] . __emitter__ . emit ( 'set' , '' , '' , true )
176
- }
177
- } )
170
+ emitter
171
+ . on ( 'set' , function ( key , val , propagate ) {
172
+ if ( propagate ) propagateChange ( obj )
173
+ } )
174
+ . on ( 'mutate' , function ( ) {
175
+ propagateChange ( obj )
176
+ } )
178
177
emitter . values = utils . hash ( )
179
178
emitter . owners = [ ]
180
179
return false
181
180
}
182
181
182
+ /**
183
+ * Propagate an array element's change to its owner arrays
184
+ */
185
+ function propagateChange ( obj ) {
186
+ var owners = obj . __emitter__ . owners ,
187
+ i = owners . length
188
+ while ( i -- ) {
189
+ owners [ i ] . __emitter__ . emit ( 'set' , '' , '' , true )
190
+ }
191
+ }
192
+
183
193
/**
184
194
* Watch target based on its type
185
195
*/
@@ -266,7 +276,7 @@ function convertKey (obj, key) {
266
276
values [ key ] = val
267
277
emitter . emit ( 'set' , key , val , propagate )
268
278
if ( Array . isArray ( val ) ) {
269
- emitter . emit ( 'set' , key + '.length' , val . length )
279
+ emitter . emit ( 'set' , key + '.length' , val . length , propagate )
270
280
}
271
281
observe ( val , key , emitter )
272
282
}
0 commit comments