mirror of https://github.com/vuejs/vue.git
				
				
				
			fix dependency tracking for nested values
This commit is contained in:
		
							parent
							
								
									fb6b4eaca5
								
							
						
					
					
						commit
						db22a2a023
					
				|  | @ -396,9 +396,9 @@ CompilerProto.createBinding = function (key, isExp) { | |||
|             compiler.exps.push(binding) | ||||
|             // need to create the bindings for keys
 | ||||
|             // that do not exist yet
 | ||||
|             var i = result.vars.length, v | ||||
|             var i = result.paths.length, v | ||||
|             while (i--) { | ||||
|                 v = result.vars[i] | ||||
|                 v = result.paths[i] | ||||
|                 if (!bindings[v]) { | ||||
|                     compiler.rootCompiler.createBinding(v) | ||||
|                 } | ||||
|  |  | |||
|  | @ -30,6 +30,11 @@ function getVariables (code) { | |||
|         : [] | ||||
| } | ||||
| 
 | ||||
| function getPaths (code, vars) { | ||||
|     var pathRE = new RegExp("\\b(" + vars.join('|') + ")[$\\w\\.]*\\b", 'g') | ||||
|     return code.match(pathRE) | ||||
| } | ||||
| 
 | ||||
| module.exports = { | ||||
| 
 | ||||
|     /** | ||||
|  | @ -61,7 +66,7 @@ module.exports = { | |||
|         /* jshint evil: true */ | ||||
|         return { | ||||
|             getter: new Function(args), | ||||
|             vars: Object.keys(hash) | ||||
|             paths: getPaths(exp, Object.keys(hash)) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -44,6 +44,7 @@ describe('UNIT: Expression Parser', function () { | |||
|         { | ||||
|             // complex with nested values
 | ||||
|             exp: "todo.title + ' : ' + (todo.done ? 'yep' : 'nope')", | ||||
|             paths: ['todo.title', 'todo.done'], | ||||
|             vm: { | ||||
|                 todo: { | ||||
|                     title: 'write tests', | ||||
|  | @ -61,16 +62,16 @@ describe('UNIT: Expression Parser', function () { | |||
| 
 | ||||
|             var result = ExpParser.parse(testCase.exp), | ||||
|                 vm     = testCase.vm, | ||||
|                 vars   = Object.keys(vm) | ||||
|                 vars   = testCase.paths || Object.keys(vm) | ||||
| 
 | ||||
|             // mock the $get().
 | ||||
|             // the real $get() will be tested in integration tests.
 | ||||
|             vm.$get = function (key) { return this[key] } | ||||
| 
 | ||||
|             it('should get correct args', function () { | ||||
|                 assert.strictEqual(result.vars.length, vars.length) | ||||
|                 assert.strictEqual(result.paths.length, vars.length) | ||||
|                 for (var i = 0; i < vars.length; i++) { | ||||
|                     assert.strictEqual(vars[i], result.vars[i]) | ||||
|                     assert.strictEqual(vars[i], result.paths[i]) | ||||
|                 } | ||||
|             }) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue