diff options
| author | Misko Hevery | 2010-05-30 16:45:35 -0700 |
|---|---|---|
| committer | Misko Hevery | 2010-05-30 16:45:35 -0700 |
| commit | ad18fe144263b966f8930edb672e08b9926e00a1 (patch) | |
| tree | cd46078c014463ab84323f2f9da7c7a59fc7b9a2 /src | |
| parent | c7d64f6d124f10c66309042c2d77896215ed43b8 (diff) | |
| download | angular.js-ad18fe144263b966f8930edb672e08b9926e00a1.tar.bz2 | |
compiler exposos both self and this function calling convention
Diffstat (limited to 'src')
| -rw-r--r-- | src/Scope.js | 14 | ||||
| -rw-r--r-- | src/apis.js | 5 | ||||
| -rw-r--r-- | src/directives.js | 12 |
3 files changed, 14 insertions, 17 deletions
diff --git a/src/Scope.js b/src/Scope.js index 6d68eeed..bed0ff6d 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -46,16 +46,16 @@ function setter(instance, path, value){ var compileCache = {}; function expressionCompile(exp){ if (isFunction(exp)) return exp; - var expFn = compileCache[exp]; - if (!expFn) { + var fn = compileCache[exp]; + if (!fn) { var parser = new Parser(exp); - expFn = parser.statements(); + var fnSelf = parser.statements(); parser.assertAllConsumed(); - compileCache[exp] = expFn; + fn = compileCache[exp] = extend( + function(){ return fnSelf(this);}, + {fnSelf: fnSelf}); } - return function(){ - return expFn(this); - }; + return fn; } function rethrow(e) { throw e; } diff --git a/src/apis.js b/src/apis.js index fda28346..1acc143b 100644 --- a/src/apis.js +++ b/src/apis.js @@ -296,10 +296,7 @@ var angularFunction = { if (isFunction(expression)){ return expression; } else if (expression){ - var fn = expressionCompile(expression); - return function($) { - return fn.apply($); - }; + return expressionCompile(expression).fnSelf; } else { return identity; } diff --git a/src/directives.js b/src/directives.js index 0a3e10ed..91a98735 100644 --- a/src/directives.js +++ b/src/directives.js @@ -155,16 +155,16 @@ angularWidget("@ng-repeat", function(expression, element){ this.$onEval(function(){ var index = 0, childCount = children.length, childScope, lastElement = reference; foreach(this.$tryEval(rhs, reference), function(value, key){ - function assign(scope) { - scope[valueIdent] = value; - if (keyIdent) scope[keyIdent] = key; - } if (index < childCount) { // reuse existing child - assign(childScope = children[index]); + childScope = children[index]; + childScope[valueIdent] = value; + if (keyIdent) childScope[keyIdent] = key; } else { // grow children - assign(childScope = template(element.clone(), createScope(currentScope))); + childScope = template(element.clone(), createScope(currentScope)); + childScope[valueIdent] = value; + if (keyIdent) childScope[keyIdent] = key; lastElement.after(childScope.$element); childScope.$index = index; childScope.$element.attr('ng-repeat-index', index); |
