|
| 1 | +/* |
| 2 | + VueJS v0.7.2 |
| 3 | + (c) 2013 Evan You |
| 4 | + License: MIT |
| 5 | +*/ |
1 | 6 | ;(function(){
|
2 | 7 |
|
3 | 8 | /**
|
@@ -778,6 +783,9 @@ var utils = module.exports = {
|
778 | 783 | warn: function() {
|
779 | 784 | if (!config.silent && console) {
|
780 | 785 | console.warn(join.call(arguments, ' '))
|
| 786 | + if (config.debug) { |
| 787 | + console.trace() |
| 788 | + } |
781 | 789 | }
|
782 | 790 | },
|
783 | 791 |
|
@@ -1262,25 +1270,27 @@ CompilerProto.define = function (key, binding) {
|
1262 | 1270 | log(' defined root binding: ' + key)
|
1263 | 1271 |
|
1264 | 1272 | var compiler = this,
|
1265 |
| - data = compiler.data, |
1266 |
| - vm = compiler.vm, |
1267 |
| - value = binding.value = data[key] // save the value before redefinening it |
1268 |
| - |
1269 |
| - if (utils.typeOf(value) === 'Object' && value.$get) { |
1270 |
| - compiler.markComputed(binding) |
1271 |
| - } |
| 1273 | + data = compiler.data, |
| 1274 | + vm = compiler.vm, |
| 1275 | + ob = data.__observer__ |
1272 | 1276 |
|
1273 | 1277 | if (!(key in data)) {
|
1274 | 1278 | data[key] = undefined
|
1275 | 1279 | }
|
1276 | 1280 |
|
1277 |
| - // if the data object is already observed, that means |
1278 |
| - // this binding is created late. we need to observe it now. |
1279 |
| - if (data.__observer__) { |
| 1281 | + // if the data object is already observed, but the key |
| 1282 | + // is not observed, we need to add it to the observed keys. |
| 1283 | + if (ob && !(key in ob.values)) { |
1280 | 1284 | Observer.convert(data, key)
|
1281 | 1285 | }
|
1282 | 1286 |
|
| 1287 | + var value = binding.value = data[key] |
| 1288 | + if (utils.typeOf(value) === 'Object' && value.$get) { |
| 1289 | + compiler.markComputed(binding) |
| 1290 | + } |
| 1291 | + |
1283 | 1292 | Object.defineProperty(vm, key, {
|
| 1293 | + enumerable: !binding.isComputed, |
1284 | 1294 | get: binding.isComputed
|
1285 | 1295 | ? function () {
|
1286 | 1296 | return compiler.data[key].$get()
|
@@ -1821,14 +1831,16 @@ function convert (obj, key) {
|
1821 | 1831 | if ((keyPrefix === '$' || keyPrefix === '_') && key !== '$index') {
|
1822 | 1832 | return
|
1823 | 1833 | }
|
1824 |
| - var observer = obj.__observer__, |
1825 |
| - val = obj[key], |
1826 |
| - values = observer.values |
1827 |
| - values[key] = val |
1828 | 1834 | // emit set on bind
|
1829 | 1835 | // this means when an object is observed it will emit
|
1830 | 1836 | // a first batch of set events.
|
| 1837 | + var observer = obj.__observer__, |
| 1838 | + values = observer.values, |
| 1839 | + val = values[key] = obj[key] |
1831 | 1840 | observer.emit('set', key, val)
|
| 1841 | + if (Array.isArray(val)) { |
| 1842 | + observer.emit('set', key + '.length', val.length) |
| 1843 | + } |
1832 | 1844 | Object.defineProperty(obj, key, {
|
1833 | 1845 | get: function () {
|
1834 | 1846 | var value = values[key]
|
|
0 commit comments