Skip to content

Commit

Permalink
root containers should watch themselves
Browse files Browse the repository at this point in the history
  • Loading branch information
darscan committed Mar 29, 2012
1 parent c8a516b commit ea0bc07
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/robotlegs/bender/extensions/viewManager/impl/StageObserver.as
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,14 @@ package robotlegs.bender.extensions.viewManager.impl
{
// The magical, but extremely expensive, capture-phase ADDED_TO_STAGE listener
container.addEventListener(Event.ADDED_TO_STAGE, onViewAddedToStage, true);
// Watch the root container itself - nobody else is going to pick it up!
container.addEventListener(Event.ADDED_TO_STAGE, onContainerRootAddedToStage);
}

private function removeRootListener(container:DisplayObjectContainer):void
{
container.removeEventListener(Event.ADDED_TO_STAGE, onViewAddedToStage, true);
container.removeEventListener(Event.ADDED_TO_STAGE, onContainerRootAddedToStage);
}

private function onViewAddedToStage(event:Event):void
Expand All @@ -95,5 +98,14 @@ package robotlegs.bender.extensions.viewManager.impl
binding = binding.parent;
}
}

private function onContainerRootAddedToStage(event:Event):void
{
const container:DisplayObjectContainer = event.target as DisplayObjectContainer;
container.removeEventListener(Event.ADDED_TO_STAGE, onContainerRootAddedToStage);
const type:Class = container['constructor'];
const binding:ContainerBinding = _registry.getBinding(container);
binding.handleView(container, type);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ package robotlegs.bender.extensions.viewManager.impl
import org.fluint.uiImpersonation.UIImpersonator;
import org.hamcrest.object.equalTo;
import robotlegs.bender.extensions.viewManager.support.CallbackViewHandler;
import robotlegs.bender.extensions.viewManager.support.SupportContainer;
import robotlegs.bender.extensions.viewManager.support.SupportView;

public class StageObserverTest
Expand Down Expand Up @@ -142,5 +143,20 @@ package robotlegs.bender.extensions.viewManager.impl
container.addChild(new Sprite());
assertThat(callCount, equalTo(0));
}

[Test]
public function root_container_is_handled_when_added_to_stage():void
{
const expected:SupportContainer = new SupportContainer();
var actual:DisplayObject;
registry
.addContainer(expected)
.addHandler(new CallbackViewHandler(function(view:DisplayObject, type:Class):void {
actual = view;
}));
container.addChild(expected);
assertThat(actual, equalTo(expected));
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// Copyright (c) 2011 the original author or authors. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
//------------------------------------------------------------------------------

package robotlegs.bender.extensions.viewManager.support
{
import flash.display.Sprite;

public class SupportContainer extends Sprite
{
}
}

0 comments on commit ea0bc07

Please sign in to comment.