Explorar o código

fix #471 merging default data with already observed instance data

Evan You %!s(int64=11) %!d(string=hai) anos
pai
achega
890e237f33
Modificáronse 2 ficheiros con 20 adicións e 1 borrados
  1. 1 1
      src/util/merge-option.js
  2. 19 0
      test/unit/specs/util/merge-option_spec.js

+ 1 - 1
src/util/merge-option.js

@@ -43,7 +43,7 @@ strats.data = function (parentVal, childVal, vm) {
     // mix default data into instance data
     for (var key in defaultData) {
       if (!instanceData.hasOwnProperty(key)) {
-        instanceData[key] = defaultData[key]
+        instanceData.$add(key, defaultData[key])
       }
     }
     return instanceData

+ 19 - 0
test/unit/specs/util/merge-option_spec.js

@@ -207,6 +207,25 @@ describe('Util - Option merging', function () {
     expect(res.data.b).toBe(2)
   })
 
+  it('already observed instance data merge with default data', function () {
+    var Observer = require('../../../../src/observer')
+    var instanceData = { a: 123 }
+    // observe it
+    Observer.create(instanceData)
+    var res = merge(
+      {
+        data: function () { return { b: 234} }
+      },
+      {
+        data: instanceData
+      },
+      {}
+    )
+    expect(res.data.a).toBe(123)
+    expect(res.data.b).toBe(234)
+    expect(Object.getOwnPropertyDescriptor(res.data, 'b').get).toBeTruthy()
+  })
+
   it('mixins', function () {
     var a = {}, b = {}, c = {}, d = {}
     var mixinA = { a: 1, directives: { a: a } }