Following fiddle demonstrates issue: http://jsfiddle.net/z9qxmkuL/3/
You should avoid directly setting elements of a data-bound Array with indices, because those changes will not be picked up by Vue.js. Instead, use the augmented $set() method:
// same as `demo.items[0] = ...` but triggers view update demo.items.$set(0, { childMsg: 'Changed!'})
Object.observe is the one to blame.
Oh here is use case for $set(). Thanks @simplesmiler :)
Most helpful comment
Object.observe is the one to blame.