Flash AS3-在显示列表中向下发送事件(而不是向上)
考虑以下情况(psuedo代码): 我可以将事件从城市发送到全国,如下所示(在城市类中):Flash AS3-在显示列表中向下发送事件(而不是向上),flash,actionscript-3,events,event-handling,Flash,Actionscript 3,Events,Event Handling,考虑以下情况(psuedo代码): 我可以将事件从城市发送到全国,如下所示(在城市类中): 因为事件会在显示列表中出现气泡。但是我怎样才能从乡村班上安排一个活动,让城市听到呢?当我向城市添加事件侦听器时,从国家/地区发送的事件不会注册。您可以通过引用其父城市的父城市将城市设置为侦听器 class City extends Sprite { public function City() { this.addEventListener(Events.ADDED_TO_
因为事件会在显示列表中出现气泡。但是我怎样才能从乡村班上安排一个活动,让城市听到呢?当我向城市添加事件侦听器时,从国家/地区发送的事件不会注册。您可以通过引用其父城市的父城市将城市设置为侦听器
class City extends Sprite
{
public function City()
{
this.addEventListener(Events.ADDED_TO_STAGE, this.foo()); // P.S. Verify event type. This is over the top of my head.
}
private function addedToStage(e:Event):void
{
this.parent.parent.addEventListener(Country.EVENT_TYPE, this.foo());
}
private function foo(e:Event):void
{
// Handle event
}
}
现在所有这些都很好,但是可能有更好的方法来构建代码。现在,您有一个循环依赖项,如果没有正确清理,可能会导致内存泄漏。如果你能详细说明你的要求,也许有人能提出另一种方法。你可以通过参考父母的父母,把一个城市设置为一个倾听者
class City extends Sprite
{
public function City()
{
this.addEventListener(Events.ADDED_TO_STAGE, this.foo()); // P.S. Verify event type. This is over the top of my head.
}
private function addedToStage(e:Event):void
{
this.parent.parent.addEventListener(Country.EVENT_TYPE, this.foo());
}
private function foo(e:Event):void
{
// Handle event
}
}
现在所有这些都很好,但是可能有更好的方法来构建代码。现在,您有一个循环依赖项,如果没有正确清理,可能会导致内存泄漏。如果您能详细说明您的需求,可能会有人提出另一种方法。您可以使用singleton eventdispatcher类,在这种情况下可能非常方便。您可以使用singleton eventdispatcher类,在这种情况下可能非常方便。可能不理想,但是我只是从子对象中将侦听器添加到舞台上,因此当它向舞台上冒泡时,它会捕获事件。可能不理想,但我只是从子对象中将侦听器添加到舞台上,因此当它向舞台上冒泡时,它会捕获事件。嗯,它可能有两层以上的深度,所以我不想走父母之路。必须有更好的方法让对象“向下”显示列表以侦听事件?您似乎正在构建某种层次结构。在这种情况下,您应该使用常规的消息传递模式,而不是让任意节点为其父节点设置侦听器。查找树视图的实现以理解我的意思。如果您确实这样做,那么您应该让国家/地区节点在列表中存储对其子节点的引用,然后在必须触发事件时遍历列表。子节点将类似地拥有自己的子节点列表,并将消息传递给每个子节点。这种方法消除了循环依赖,并且更容易维护。嗯,它可能有两层以上的深度,所以我不想走parent.parent的道路。必须有更好的方法让对象“向下”显示列表以侦听事件?您似乎正在构建某种层次结构。在这种情况下,您应该使用常规的消息传递模式,而不是让任意节点为其父节点设置侦听器。查找树视图的实现以理解我的意思。如果您确实这样做,那么您应该让国家/地区节点在列表中存储对其子节点的引用,然后在必须触发事件时遍历列表。子节点将类似地拥有自己的子节点列表,并将消息传递给每个子节点。这种方法消除了循环依赖,并且更易于维护。
class City extends Sprite
{
public function City()
{
this.addEventListener(Events.ADDED_TO_STAGE, this.foo()); // P.S. Verify event type. This is over the top of my head.
}
private function addedToStage(e:Event):void
{
this.parent.parent.addEventListener(Country.EVENT_TYPE, this.foo());
}
private function foo(e:Event):void
{
// Handle event
}
}