Skip to content

Commit 33dbb5e

Browse files
committed
make deep watch traverse arrays
1 parent 8899672 commit 33dbb5e

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

src/watcher.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,13 @@ p.teardown = function () {
225225
*/
226226

227227
function traverse (obj) {
228-
var key, val
228+
var key, val, i
229229
for (key in obj) {
230230
val = obj[key]
231-
if (_.isObject(val)) {
231+
if (_.isArray(val)) {
232+
i = val.length
233+
while (i--) traverse(val[i])
234+
} else if (_.isObject(val)) {
232235
traverse(val)
233236
}
234237
}

test/unit/specs/watcher_spec.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,15 +289,20 @@ describe('Watcher', function () {
289289

290290
it('deep watch', function (done) {
291291
var watcher = new Watcher(vm, 'b', spy, null, false, true)
292-
vm.b.c = 3
292+
vm.b.c = { d: 4 }
293293
nextTick(function () {
294294
expect(spy).toHaveBeenCalledWith(vm.b, vm.b)
295295
var oldB = vm.b
296-
vm.b = { c: 4 }
296+
vm.b = { c: [{a:1}] }
297297
nextTick(function () {
298298
expect(spy).toHaveBeenCalledWith(vm.b, oldB)
299299
expect(spy.calls.count()).toBe(2)
300-
done()
300+
vm.b.c[0].a = 2
301+
nextTick(function () {
302+
expect(spy).toHaveBeenCalledWith(vm.b, vm.b)
303+
expect(spy.calls.count()).toBe(3)
304+
done()
305+
})
301306
})
302307
})
303308
})

0 commit comments

Comments
 (0)