diff options
| author | Shyam Seshadri | 2010-06-02 15:04:26 -0700 | 
|---|---|---|
| committer | Shyam Seshadri | 2010-06-02 15:04:26 -0700 | 
| commit | a29c5e4c7fd5e708c28e70e974bf873621d5277c (patch) | |
| tree | 17efcdc2df48d32a0a928cc2ab755f355e9f6ae1 /src | |
| parent | 6143b04384680d17f38c2d5894a9b9961ea33288 (diff) | |
| download | angular.js-a29c5e4c7fd5e708c28e70e974bf873621d5277c.tar.bz2 | |
Revert "removed few key foreach and replaced thime with for loop for performance."
This reverts commit 6143b04384680d17f38c2d5894a9b9961ea33288.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Scope.js | 21 | ||||
| -rw-r--r-- | src/directives.js | 51 | 
2 files changed, 30 insertions, 42 deletions
diff --git a/src/Scope.js b/src/Scope.js index 637fc25e..1c223130 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -53,15 +53,14 @@ function getterFn(path){    var code = 'function (self){\n';    code += '  var last, fn, type;\n';    foreach(path.split('.'), function(key) { -    key = (key == 'this')  ? '["this"]' : '.' + key;      code += '  if(!self) return self;\n';      code += '  last = self;\n'; -    code += '  self = self' + key + ';\n'; +    code += '  self = self.' + key + ';\n';      code += '  if(typeof self == "function") \n'; -    code += '    self = function(){ return last'+key+'.apply(last, arguments); };\n'; -    if (key.charAt(1) == '$') { +    code += '    self = function(){ return last.'+key+'.apply(last, arguments); };\n'; +    if (key.charAt(0) == '$') {        // special code for super-imposed functions -      var name = key.substr(2); +      var name = key.substr(1);        code += '  if(!self) {\n';        code += '    type = angular.Global.typeOf(last);\n';        code += '    fn = (angular[type.charAt(0).toUpperCase() + type.substring(1)]||{})["' + name + '"];\n'; @@ -124,13 +123,11 @@ function createScope(parent, services, existing) {        if (exp !== undefined) {          return expressionCompile(exp).apply(instance, slice.call(arguments, 1, arguments.length));        } else { -        for ( var i = 0, iSize = evalLists.sorted.length; i < iSize; i++) { -          for ( var queue = evalLists.sorted[i], -                    jSize = queue.length, -                    j= 0; j < jSize; j++) { -            instance.$tryEval(queue[j].fn, queue[j].handler); -          } -        } +        foreach(evalLists.sorted, function(list) { +          foreach(list, function(eval) { +            instance.$tryEval(eval.fn, eval.handler); +          }); +        });        }      }, diff --git a/src/directives.js b/src/directives.js index cabf0c23..91a98735 100644 --- a/src/directives.js +++ b/src/directives.js @@ -24,17 +24,14 @@ angularDirective("ng-eval", function(expression){  angularDirective("ng-bind", function(expression){    return function(element) { -    var lastValue = noop, lastError = noop; +    var lastValue, lastError;      this.$onEval(function() {        var error,            value = this.$tryEval(expression, function(e){              error = toJson(e);            }), -          isHtml, -          isDomElement; -      if (lastValue === value && lastError == error) return; -      isHtml = value instanceof HTML, -      isDomElement = isElement(value); +          isHtml = value instanceof HTML, +          isDomElement = isElement(value);        if (!isHtml && !isDomElement && isObject(value)) {          value = toJson(value);        } @@ -75,14 +72,14 @@ function compileBindTemplate(template){      });      bindTemplateCache[template] = fn = function(element){        var parts = [], self = this; -      for ( var i = 0; i < bindings.length; i++) { -        var value = bindings[i].call(self, element); +      foreach(bindings, function(fn){ +        var value = fn.call(self, element);          if (isElement(value))            value = '';          else if (isObject(value))            value = toJson(value, true);          parts.push(value); -      }; +      });        return parts.join('');      };    } @@ -110,26 +107,21 @@ var REMOVE_ATTRIBUTES = {  };  angularDirective("ng-bind-attr", function(expression){    return function(element){ -    var lastValue = {};      this.$onEval(function(){ -      var values = this.$eval(expression); -      for(var key in values) { -        var value = compileBindTemplate(values[key]).call(this, element), +      foreach(this.$eval(expression), function(bindExp, key) { +        var value = compileBindTemplate(bindExp).call(this, element),              specialName = REMOVE_ATTRIBUTES[lowercase(key)]; -        if (lastValue[key] !== value) { -          lastValue[key] = value; -          if (specialName) { -            if (element[specialName] = toBoolean(value)) { -              element.attr(specialName, value); -            } else { -              element.removeAttr(key); -            } -            (element.data('$validate')||noop)(); +        if (specialName) { +          if (element[specialName] = toBoolean(value)) { +            element.attr(specialName, value);            } else { -            element.attr(key, value); +            element.removeAttr(key);            } +          (element.data('$validate')||noop)(); +        } else { +          element.attr(key, value);          } -      }; +      }, this);      }, element);    };  }); @@ -161,18 +153,17 @@ angularWidget("@ng-repeat", function(expression, element){      var children = [], currentScope = this;      this.$onEval(function(){ -      var index = 0, childCount = children.length, childScope, lastElement = reference, -          collection = this.$tryEval(rhs, reference); -      for ( var key in collection) { +      var index = 0, childCount = children.length, childScope, lastElement = reference; +      foreach(this.$tryEval(rhs, reference), function(value, key){          if (index < childCount) {            // reuse existing child            childScope = children[index]; -          childScope[valueIdent] = collection[key]; +          childScope[valueIdent] = value;            if (keyIdent) childScope[keyIdent] = key;          } else {            // grow children            childScope = template(element.clone(), createScope(currentScope)); -          childScope[valueIdent] = collection[key]; +          childScope[valueIdent] = value;            if (keyIdent) childScope[keyIdent] = key;            lastElement.after(childScope.$element);            childScope.$index = index; @@ -183,7 +174,7 @@ angularWidget("@ng-repeat", function(expression, element){          childScope.$eval();          lastElement = childScope.$element;          index ++; -      }; +      });        // shrink children        while(children.length > index) {          children.pop().$element.remove();  | 
