From 873d2860c0922fdf8dcae8cb081ec3e74d882750 Mon Sep 17 00:00:00 2001 From: James deBoer Date: Thu, 22 May 2014 15:50:56 -0700 Subject: [PATCH] fix(element binder): Ensure mappings are evaluated before attach() is called. Closes #1059 --- lib/core_dom/element_binder.dart | 4 +++- test/core_dom/compiler_spec.dart | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/core_dom/element_binder.dart b/lib/core_dom/element_binder.dart index 98fb382c3..79be68c1c 100644 --- a/lib/core_dom/element_binder.dart +++ b/lib/core_dom/element_binder.dart @@ -353,9 +353,11 @@ class _TaskList { Function onDone; final List _tasks = []; bool isDone = false; + int firstTask; _TaskList(this.onDone) { if (onDone == null) isDone = true; + firstTask = registerTask(); } int registerTask() { @@ -374,7 +376,7 @@ class _TaskList { } void doneRegistering() { - completeTask(registerTask()); + completeTask(firstTask); } } diff --git a/test/core_dom/compiler_spec.dart b/test/core_dom/compiler_spec.dart index bdc3eb296..8413ca976 100644 --- a/test/core_dom/compiler_spec.dart +++ b/test/core_dom/compiler_spec.dart @@ -280,6 +280,7 @@ void main() { describe('components', () { beforeEachModule((Module module) { module + ..bind(AttachWithAttr) ..bind(CamelCaseMapComponent) ..bind(IoComponent) ..bind(IoControllerComponent) @@ -654,6 +655,15 @@ void main() { expect(logger).toEqual(['SimpleAttachComponent']); })); + it('should call attach after mappings have been set', async((Logger logger) { + _.compile(''); + + _.rootScope.apply(); + microLeap(); + + expect(logger).toEqual(['attr', 'oneway', 'attach']); + })); + it('should inject compenent element as the dom.Element', async((Logger log, TestBed _, MockHttpBackend backend) { backend.whenGET('base/test/core_dom/foo.html').respond('
WORKED
'); _.compile(''); @@ -1205,6 +1215,19 @@ class SimpleAttachComponent implements AttachAware, ShadowRootAware { onShadowRoot(_) => logger('onShadowRoot'); } +@Decorator( + selector: 'attach-with-attr' +) +class AttachWithAttr implements AttachAware { + Logger logger; + AttachWithAttr(this.logger); + attach() => logger('attach'); + @NgAttr('attr') + set attr(v) => logger('attr'); + @NgOneWay('oneway') + set oneway(v) => logger('oneway'); +} + @Component( selector: 'log-element', templateUrl: 'foo.html')