Переглянути джерело

fix $add/$delete reserved key warning (no longer needed)

Evan You 11 роки тому
батько
коміт
f3074a1037
2 змінених файлів з 7 додано та 18 видалено
  1. 5 14
      src/observer/object.js
  2. 2 4
      test/unit/specs/api/data_spec.js

+ 5 - 14
src/observer/object.js

@@ -14,16 +14,12 @@ _.define(
   objProto,
   '$add',
   function $add (key, val) {
+    if (this.hasOwnProperty(key)) return
     var ob = this.__ob__
-    if (!ob) {
+    if (!ob || _.isReserved(key)) {
       this[key] = val
       return
     }
-    if (_.isReserved(key)) {
-      _.warn('Refused to $add reserved key: ' + key)
-      return
-    }
-    if (this.hasOwnProperty(key)) return
     ob.convert(key, val)
     if (ob.vms) {
       var i = ob.vms.length
@@ -50,17 +46,12 @@ _.define(
   objProto,
   '$delete',
   function $delete (key) {
+    if (!this.hasOwnProperty(key)) return
+    delete this[key]
     var ob = this.__ob__
-    if (!ob) {
-      delete this[key]
-      return
-    }
-    if (_.isReserved(key)) {
-      _.warn('Refused to $add reserved key: ' + key)
+    if (!ob || _.isReserved(key)) {
       return
     }
-    if (!this.hasOwnProperty(key)) return
-    delete this[key]
     if (ob.vms) {
       var i = ob.vms.length
       while (i--) {

+ 2 - 4
test/unit/specs/api/data_spec.js

@@ -65,10 +65,9 @@ describe('Data API', function () {
     expect(vm.c).toBe(1)
     expect(vm._data.c).toBe(1)
     expect(vm._digest).toHaveBeenCalled()
-    // reserved key should warn
+    // reserved key should not be proxied
     vm.$add('_c', 1)
     expect(vm._c).toBeUndefined()
-    expect(_.warn).toHaveBeenCalled()
   })
 
   it('$delete', function () {
@@ -77,10 +76,9 @@ describe('Data API', function () {
     expect(vm.hasOwnProperty('a')).toBe(false)
     expect(vm._data.hasOwnProperty('a')).toBe(false)
     expect(vm._digest).toHaveBeenCalled()
-    // reserved key should warn
+    // reserved key should not be deleted
     vm.$delete('_data')
     expect(vm._data).toBeTruthy()
-    expect(_.warn).toHaveBeenCalled()
   })
 
   it('$watch', function (done) {