From c7d64f6d124f10c66309042c2d77896215ed43b8 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Sun, 30 May 2010 16:34:59 -0700 Subject: improve error handling with elements --- scenario/perf.html | 2 +- src/Angular.js | 15 +++++++++------ src/Browser.js | 2 +- src/Scope.js | 8 +------- src/apis.js | 3 ++- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/scenario/perf.html b/scenario/perf.html index c2f26317..1b0e40b4 100644 --- a/scenario/perf.html +++ b/scenario/perf.html @@ -8,7 +8,7 @@ PerfCntl.prototype = { createItems: function(){ var items = []; - for ( var i = 0; i < 100; i++) { + for ( var i = 0; i < 1000; i++) { var item = { name: "" + Math.random(), parts: [Math.random(), Math.random()] diff --git a/src/Angular.js b/src/Angular.js index 8675bc40..39e9b385 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -291,12 +291,15 @@ function elementError(element, type, error) { while (!isRenderableElement(element)) { element = element.parent() || jqLite(document.body); } - if (error) { - element.addClass(type); - element.attr(type, error); - } else { - element.removeClass(type); - element.removeAttr(type); + if (element[0]['$NG_ERROR'] !== error) { + element[0]['$NG_ERROR'] = error; + if (error) { + element.addClass(type); + element.attr(type, error); + } else { + element.removeClass(type); + element.removeAttr(type); + } } } diff --git a/src/Browser.js b/src/Browser.js index 0e265c0c..0552b3ae 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -3,7 +3,7 @@ ////////////////////////////// function Browser(location, document) { - this.delay = 25; + this.delay = 50; this.expectedUrl = location.href; this.urlListeners = []; this.hoverListener = noop; diff --git a/src/Scope.js b/src/Scope.js index ac07c7a4..6d68eeed 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -53,14 +53,8 @@ function expressionCompile(exp){ parser.assertAllConsumed(); compileCache[exp] = expFn; } - return parserNewScopeAdapter(expFn); -} - -// return expFn -// TODO(remove this hack) -function parserNewScopeAdapter(fn) { return function(){ - return fn(this); + return expFn(this); }; } diff --git a/src/apis.js b/src/apis.js index 166ca27c..fda28346 100644 --- a/src/apis.js +++ b/src/apis.js @@ -296,8 +296,9 @@ var angularFunction = { if (isFunction(expression)){ return expression; } else if (expression){ + var fn = expressionCompile(expression); return function($) { - return expressionCompile(expression).apply($); + return fn.apply($); }; } else { return identity; -- cgit v1.2.3