diff options
| author | Igor Minar | 2012-05-03 21:49:06 -0700 | 
|---|---|---|
| committer | Igor Minar | 2012-05-03 23:40:43 -0700 | 
| commit | b431ee38509724ba9098a7be7a8d6c5dcded4fe9 (patch) | |
| tree | 5f0dc9efb902033be927c0acfaf38f67b9c740f7 | |
| parent | a44d3dcd6a31f21de957855c732a28c881372549 (diff) | |
| download | angular.js-b431ee38509724ba9098a7be7a8d6c5dcded4fe9.tar.bz2 | |
fix($compile): fix replaceWith
the old implementation didn't reattach jquery/jqlite data which caused
things like  to be lost
I tried various implementations but it appears that by reattaching the data
to the new node by copying the expando property is the most reliable of all.
| -rw-r--r-- | src/jqLite.js | 2 | ||||
| -rw-r--r-- | src/ng/compile.js | 18 | 
2 files changed, 7 insertions, 13 deletions
diff --git a/src/jqLite.js b/src/jqLite.js index efe3ec31..02291932 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -75,7 +75,7 @@   */  var jqCache = {}, -    jqName = 'ng-' + new Date().getTime(), +    jqName = JQLite.expando = 'ng-' + new Date().getTime(),      jqId = 1,      addEventListenerFn = (window.document.addEventListener        ? function(element, type, fn) {element.addEventListener(type, fn, false);} diff --git a/src/ng/compile.js b/src/ng/compile.js index 5db7b671..00628365 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -867,22 +867,12 @@ function $CompileProvider($provide) {                  linkRootElement = linkQueue.pop(),                  origLinkNode = linkQueue.pop(),                  scope = linkQueue.pop(), -                linkNode = compileNode, -                $origLinkNode = jqLite(origLinkNode); +                linkNode = compileNode;              if (origLinkNode !== origCompileNode) {                // it was cloned therefore we have to clone as well.                linkNode = JQLiteClone(compileNode); -              replaceWith(linkRootElement, $origLinkNode, linkNode); -            } - -            if (replace) { -              if ($origLinkNode.data('$scope')) { -                // if the original element before replacement had a new scope, the replacement should -                // get it as well -                jqLite(linkNode).data('$scope', scope); -              } -              dealoc($origLinkNode); +              replaceWith(linkRootElement, jqLite(origLinkNode), linkNode);              }              afterTemplateNodeLinkFn(function() { @@ -992,12 +982,16 @@ function $CompileProvider($provide) {          for(i = 0, ii = $rootElement.length; i < ii; i++) {            if ($rootElement[i] == oldNode) {              $rootElement[i] = newNode; +            break;            }          }        } +        if (parent) {          parent.replaceChild(newNode, oldNode);        } + +      newNode[jqLite.expando] = oldNode[jqLite.expando];        $element[0] = newNode;      }    }];  | 
