diff options
| -rw-r--r-- | src/Compiler.js | 2 | ||||
| -rw-r--r-- | test/CompilerSpec.js | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/Compiler.js b/src/Compiler.js index 3f5ba9e1..58a7a47b 100644 --- a/src/Compiler.js +++ b/src/Compiler.js @@ -75,7 +75,7 @@ Template.prototype = { function retrieveScope(element) { var scope; element = jqLite(element); - while (element && !(scope = element.data($$scope))) { + while (element && element.length && !(scope = element.data($$scope))) { element = element.parent(); } return scope; diff --git a/test/CompilerSpec.js b/test/CompilerSpec.js index d8c7c1b8..76d3d1ca 100644 --- a/test/CompilerSpec.js +++ b/test/CompilerSpec.js @@ -167,4 +167,23 @@ describe('compiler', function(){ expect(sortedHtml(scope.$element)).toEqual('<div>A<hr></hr>B<hr></hr>C<p></p>D</div>'); }); + + describe('retrieveScope', function() { + it('should retrieve scope attached to the current element', function() { + scope = compile('<i>foo</i>'); + expect(retrieveScope(scope.$element)).toBe(scope); + }); + + it('should walk up the dom to find scope', function() { + scope = compile('<ul><li><p><b>deep deep</b><p></li></ul>'); + var deepChild = scope.$element[0].getElementsByTagName('b')[0]; + expect(retrieveScope(deepChild)).toBe(scope); + }); + + it('should return undefined when no scope was found', function() { + var html = jqLite('<ul><li><p><b>deep deep</b><p></li></ul>'), + deepChild = html[0].getElementsByTagName('b')[0]; + expect(retrieveScope(deepChild)).toBeNull(); + }); + }); }); |
