|
| 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