Skip to content

Commit b6cceaa

Browse files
committed
deprecate $set and $delete on objects, use Vue.set/delete instead
1 parent 26a624e commit b6cceaa

File tree

14 files changed

+110
-138
lines changed

14 files changed

+110
-138
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')
@@ -52,7 +53,7 @@ exports.$set = function (exp, val) {
5253
*/
5354

5455
exports.$delete = function (key) {
55-
this._data.$delete(key)
56+
_.delete(this._data, key)
5657
}
5758

5859
/**

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

1214
/**

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)
@@ -97,7 +95,7 @@ exports._setData = function (newData) {
9795
i = keys.length
9896
while (i--) {
9997
key = keys[i]
100-
if (!_.isReserved(key) && !(key in newData)) {
98+
if (!(key in newData)) {
10199
this._unproxy(key)
102100
}
103101
}
@@ -107,7 +105,7 @@ exports._setData = function (newData) {
107105
i = keys.length
108106
while (i--) {
109107
key = keys[i]
110-
if (!this.hasOwnProperty(key) && !_.isReserved(key)) {
108+
if (!this.hasOwnProperty(key)) {
111109
// new property
112110
this._proxy(key)
113111
}
@@ -125,20 +123,23 @@ exports._setData = function (newData) {
125123
*/
126124

127125
exports._proxy = function (key) {
128-
// need to store ref to self here
129-
// because these getter/setters might
130-
// be called by child instances!
131-
var self = this
132-
Object.defineProperty(self, key, {
133-
configurable: true,
134-
enumerable: true,
135-
get: function proxyGetter () {
136-
return self._data[key]
137-
},
138-
set: function proxySetter (val) {
139-
self._data[key] = val
140-
}
141-
})
126+
if (!_.isReserved(key)) {
127+
// need to store ref to self here
128+
// because these getter/setters might
129+
// be called by child scopes via
130+
// prototype inheritance.
131+
var self = this
132+
Object.defineProperty(self, key, {
133+
configurable: true,
134+
enumerable: true,
135+
get: function proxyGetter () {
136+
return self._data[key]
137+
},
138+
set: function proxySetter (val) {
139+
self._data[key] = val
140+
}
141+
})
142+
}
142143
}
143144

144145
/**
@@ -148,7 +149,9 @@ exports._proxy = function (key) {
148149
*/
149150

150151
exports._unproxy = function (key) {
151-
delete this[key]
152+
if (!_.isReserved(key)) {
153+
delete this[key]
154+
}
152155
}
153156

154157
/**

src/observer/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ var config = require('../config')
33
var Dep = require('./dep')
44
var arrayMethods = require('./array')
55
var arrayKeys = Object.getOwnPropertyNames(arrayMethods)
6-
require('./object')
76

87
/**
98
* Observer class that are attached to each observed

src/observer/object.js

Lines changed: 0 additions & 86 deletions
This file was deleted.

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,3 +1,67 @@
1+
/**
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+
165
/**
266
* Check if an expression is a literal value.
367
*

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
@@ -86,5 +86,5 @@ extend(p, require('./api/events'))
8686
extend(p, require('./api/child'))
8787
extend(p, require('./api/lifecycle'))
8888

89-
Vue.version = '1.0.0-alpha'
89+
Vue.version = '1.0.0-beta.3'
9090
module.exports = _.Vue = Vue

0 commit comments

Comments
 (0)