10000 deprecate $set and $delete on objects, use Vue.set/delete instead · bencode/vue@9b50ee3 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9b50ee3

Browse files
committed
deprecate $set and $delete on objects, use Vue.set/delete instead
1 parent db5d967 commit 9b50ee3

File tree

10 files changed

+121
-81
lines changed

10 files changed

+121
-81
lines changed

examples/tree/tree.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Vue.component('item', {
5454
},
5555
changeType: function () {
5656
if (!this.isFolder) {
57-
this.model.$set('children', [])
57+
Vue.set(this.model, 'children', [])
5858
this.addChild()
5959
this.open = true
6060
}

src/api/data.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
var _ = require('../util')
12
var Watcher = require('../watcher')
23
var Path = require('../parsers/path')
34
var textParser = require('../parsers/text')
@@ -66,7 +67,7 @@ exports.$add = function (key, val) {
6667
*/
6768

6869
exports.$delete = function (key) {
69-
this._data.$delete(key)
70+
_.delete(this._data, key)
7071
}
7172

7273
/**

src/api/global.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ var config = require('../config')
77

88
exports.util = _
99
exports.config = config
10+
exports.set = _.set
11+
exports.delete = _.delete
1012
exports.nextTick = _.nextTick
1113
exports.compiler = require('../compiler')
1214
exports.FragmentFactory = require('../fragment/factory')

src/deprecations.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ if (process.env.NODE_ENV !== 'production') {
2323
)
2424
},
2525

26+
SET: function () {
27+
warn(
28+
'$set() on plain objects will be deperecated in 1.0.0. ' +
29+
'Use `Vue.set(obj, key, value)` instead.'
30+
)
31+
},
32+
33+
DELETE: function () {
34+
warn(
35+
'$delete() on plain objects will be deperecated in 1.0.0. ' +
36+
'Use `Vue.delete(obj, key)` instead.'
37+
)
38+
},
39+
2640
WAIT_FOR: function () {
2741
warn(
2842
'"wait-for" will be deprecated in 1.0.0. Use `activate` hook instead. ' +

src/instance/state.js

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ exports._initData = function () {
6262
}
6363
if (this._props[prop].raw !== null ||
6464
!optionsData.hasOwnProperty(prop)) {
65-
optionsData.$set(prop, propsData[prop])
65+
_.set(optionsData, prop, propsData[prop])
6666
}
6767
}
6868
}
@@ -73,9 +73,7 @@ exports._initData = function () {
7373
i = keys.length
7474
while (i--) {
7575
key = keys[i]
76-
if (!_.isReserved(key)) {
77-
this._proxy(key)
78-
}
76+
this._proxy(key)
7977
}
8078
// observe data
8179
Observer.create(data, this)
@@ -110,7 +108,7 @@ exports._setData = function (newData) {
110108
i = keys.length
111109
while (i--) {
112110
key = keys[i]
113-
if (!_.isReserved(key) && !(key in newData)) {
111+
if (!(key in newData)) {
114112
this._unproxy(key)
115113
}
116114
}
@@ -120,7 +118,7 @@ exports._setData = function (newData) {
120118
i = keys.length
121119
while (i--) {
122120
key = keys[i]
123-
if (!this.hasOwnProperty(key) && !_.isReserved(key)) {
121+
if (!this.hasOwnProperty(key)) {
124122
// new property
125123
this._proxy(key)
126124
}
@@ -138,20 +136,23 @@ exports._setData = function (newData) {
138136
*/
139137

140138
exports._proxy = function (key) {
141-
// need to store ref to self here
142-
// because these getter/setters might
143-
// be called by child instances!
144-
var self = this
145-
Object.defineProperty(self, key, {
146-
configurable: true,
147-
enumerable: true,
148-
get: function proxyGetter () {
149-
return self._data[key]
150-
},
151-
set: function proxySetter (val) {
152-
self._data[key] = val
153-
}
154-
})
139+
if (!_.isReserved(key)) {
140+
// need to store ref to self here
141+
// because these getter/setters might
142+
// be called by child scopes via
143+
// prototype inheritance.
144+
var self = this
145+
Object.defineProperty(self, key, {
146+
configurable: true,
147+
enumerable: true,
148+
get: function proxyGetter () {
149+
return self._data[key]
150+
},
151+
set: function proxySetter (val) {
152+
self._data[key] = val
153+
}
154+
})
155+
}
155156
}
156157

157158
/**
@@ -161,7 +162,9 @@ exports._proxy = function (key) {
161162
*/
162163

163164
exports._unproxy = function (key) {
164-
delete this[key]
165+
if (!_.isReserved(key)) {
166+
delete this[key]
167+
}
165168
}
166169

167170
/**

src/observer/object.js

Lines changed: 10 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -12,45 +12,11 @@ _.define(
1212
if (process.env.NODE_ENV !== 'production') {
1313
_.deprecation.ADD()
1414
}
15-
add(this, key, val)
16-
}
17-
)
18-
19-
/**
20-
* Add a new property to an observed object
21-
* and emits corresponding event. This is internal and
22-
* no longer exposed as of 1.0.
23-
*
24-
* @param {Object} obj
25-
* @param {String} key
26-
* @param {*} val
27-
* @public
28-
*/
29-
30-
var add = exports.add = function (obj, key, val) {
31-
if (obj.hasOwnProperty(key)) {
32-
return
33-
}
34-
if (obj._isVue) {
35-
add(obj._data, key, val)
36-
return
37-
}
38-
var ob = obj.__ob__
39-
if (!ob) {
40-
obj[key] = val
41-
return
42-
}
43-
ob.convert(key, val)
44-
ob.notify()
45-
if (ob.vms) {
46-
var i = ob.vms.length
47-
while (i--) {
48-
var vm = ob.vms[i]
49-
vm._proxy(key)
50-
vm._digest()
15+
if (!this.hasOwnProperty(key)) {
16+
_.set(this, key, val)
5117
}
5218
}
53-
}
19+
)
5420

5521
/**
5622
* Set a property on an observed object, calling add to
@@ -65,8 +31,10 @@ _.define(
6531
objProto,
6632
'$set',
6733
function $set (key, val) {
68-
add(this, key, val)
69-
this[key] = val
34+
if (process.env.NODE_ENV !== 'production') {
35+
_.deprecation.SET()
36+
}
37+
_.set(this, key, val)
7038
}
7139
)
7240

@@ -82,20 +50,9 @@ _.define(
8250
objProto,
8351
'$delete',
8452
function $delete (key) {
85-
if (!this.hasOwnProperty(key)) return
86-
delete this[key]
87-
var ob = this.__ob__
88-
if (!ob) {
89-
return
90-
}
91-
ob.notify()
92-
if (ob.vms) {
93-
var i = ob.vms.length
94-
while (i--) {
95-
var vm = ob.vms[i]
96-
vm._unproxy(key)
97-
vm._digest()
98-
}
53+
if (process.env.NODE_ENV !== 'production') {
54+
_.deprecation.DELETE()
9955
}
56+
_.delete(this, key)
10057
}
10158
)

src/parsers/path.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
var _ = require('../util')
2-
var add = require('../observer/object').add
32
var Cache = require('../cache')
43
var pathCache = new Cache(1000)
54
var identRE = exports.identRE = /^[$_a-zA-Z]+[\w$]*$/
@@ -340,7 +339,7 @@ exports.set = function (obj, path, val) {
340339
if (process.env.NODE_ENV !== 'production' && last._isVue) {
341340
warnNonExistent(path)
342341
}
343-
add(last, key, obj)
342+
_.set(last, key, obj)
344343
}
345344
} else {
346345
if (_.isArray(obj)) {
@@ -351,7 +350,7 @@ exports.set = function (obj, path, val) {
351350
if (process.env.NODE_ENV !== 'production' && obj._isVue) {
352351
warnNonExistent(path)
353352
}
354-
add(obj, key, val)
353+
_.set(obj, key, val)
355354
}
356355
}
357356
}

src/util/lang.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,68 @@
11
/**
2+
* Set a property on an object. Adds the new property and
3+
* triggers change notification if the property doesn't
4+
* already exist.
5+
*
6+
* @param {Object} obj
7+
* @param {String} key
8+
* @param {*} val
9+
* @public
10+
*/
11+
12+
exports.set = function set (obj, key, val) {
13+
if (obj.hasOwnProperty(key)) {
14+
obj[key] = val
15+
return
16+
}
17+
if (obj._isVue) {
18+
set(obj._data, key, val)
19+
return
20+
}
21+
var ob = obj.__ob__
22+
if (!ob) {
23+
obj[key] = val
24+
return
25+
}
26+
ob.convert(key, val)
27+
ob.notify()
28+
if (ob.vms) {
29+
var i = ob.vms.length
30+
while (i--) {
31+
var vm = ob.vms[i]
32+
vm._proxy(key)
33+
vm._digest()
34+
}
35+
}
36+
}
37+
38+
/**
39+
* Delete a property and trigger change if necessary.
40+
*
41+
* @param {Object} obj
42+
* @param {String} key
43+
*/
44+
45+
exports.delete = function (obj, key) {
46+
if (!obj.hasOwnProperty(key)) {
47+
return
48+
}
49+
delete obj[key]
50+
var ob = obj.__ob__
51+
if (!ob) {
52+
return
53+
}
54+
ob.notify()
55+
if (ob.vms) {
56+
var i = ob.vms.length
57+
while (i--) {
58+
var vm = ob.vms[i]
59+
vm._unproxy(key)
60+
vm._digest()
61+
}
62+
}
63+
}
64+
65+
/*
266
* Check if a string starts with $ or _
367
*
468
* @param {String} str

src/util/options.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function mergeData (to, from) {
2626
toVal = to[key]
2727
fromVal = from[key]
2828
if (!to.hasOwnProperty(key)) {
29-
to.$set(key, fromVal)
29+
_.set(to, key, fromVal)
3030
} else if (_.isObject(toVal) && _.isObject(fromVal)) {
3131
mergeData(toVal, fromVal)
3232
}

src/vue.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,5 +102,5 @@ extend(p, require('./api/events'))
102102
extend(p, require('./api/child'))
103103
extend(p, require('./api/lifecycle'))
104104

105-
Vue.version = '1.0.0-alpha'
105+
Vue.version = '1.0.0-beta.3'
106106
module.exports = _.Vue = Vue

0 commit comments

Comments
 (0)
0