Skip to content

Instantly share code, notes, and snippets.

@soundkitchen
Created July 13, 2010 06:44
Show Gist options
  • Save soundkitchen/473537 to your computer and use it in GitHub Desktop.
Save soundkitchen/473537 to your computer and use it in GitHub Desktop.
if (!event || !event.bubbles) return;
//// Bubble the event as far as possible.
var currentTarget:Object = this.target;
while ( currentTarget && currentTarget.hasOwnProperty("parent")
&& (currentTarget = currentTarget.parent) )
{
if (currentTarget is IBubbleEventHandler)
{
// onEventBubbled() can stop the bubbling by returning false.
if (!IBubbleEventHandler(event.currentTarget = currentTarget).onEventBubbled(event))
break;
}
}
package
{
import flash.display.Sprite;
import org.osflash.signals.DeluxeSignal;
import org.osflash.signals.events.IEvent;
import org.osflash.signals.events.IBubbleEventHandler;
import org.osflash.signals.events.GenericEvent;
/**
* as3-signals のサンプル 2
*/
public class Sample1 extends Sprite
{
private var _signal:DeluxeSignal;
public function Sample1()
{
_signal = new DeluxeSignal(this);
// シグナルにリスナーを登録
_signal.add(signalHandler);
// シグナルをトリガー
// 引数に渡すのは GenericEvent
_signal.dispatch(new GenericEvent());
}
/**
*シグナルがトリガーされたら呼ばれる
*/
private function signalHandler(evt:IEvent):void
{
// 擬似的なイベントのロジックが走る
trace(evt.target, evt.currentTarget, evt.signal);
}
}
public class Sample1 extends Sprite
implements IBubbleEventHandler
{
private var _signal:DeluxeSignal;
private var _box:Sprite;
public function Sample1()
{
// 子要素を作ってステージに置く
_box = addChild(new Sprite()) as Sprite;
_box.graphics.beginFill(0x00);
_box.graphics.drawRect(0, 0, 100, 100);
_box.graphics.endFill();
// _box をターゲットにしてシグナルを作る
_signal = new DeluxeSignal(_box);
// シグナルにリスナーを登録
_signal.add(signalHandler);
// イベントの引数 bubbles を true にしてシグナルをトリガー
_signal.dispatch(new GenericEvent(true));
}
/**
* シグナルがトリガーされたら呼ばれる
*/
private function signalHandler(evt:IEvent):void
{
// この時は target も currentTarget も _box になる
trace(evt.target, evt.currentTarget, evt.signal);
}
/**
* シグナルがバブリングしてくると呼ばれる
*/
public function onEventBubbled(evt:IEvent):Boolean
{
// この時は target は _box で currentTarget は this になる
trace(evt.target, evt.currentTarget, evt.signal);
// false を返すとバブリングが止まる
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment