minimalCompsを持つクラスをロードしたらどうなるか?
forked from クラスロードのテストやってみる。 (diff: 126)
実際にminimalCompsのヘルパーをつくってみた。ロードしてみたらちゃんとうごくだろうか?
ActionScript3 source code
/**
* Copyright poepoemix ( http://wonderfl.net/user/poepoemix )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/g9jx
*/
package
{
import flash.net.URLRequest;
import flash.display.LoaderInfo;
import flash.display.Loader;
import flash.events.Event;
import flash.display.Sprite;
public class MyClass extends Sprite
{
private static var logger:*;
private var helper:*;
/**
* コンストラクタ
*/
public function MyClass()
{
if(stage) {
pre_init();
}
else {
addEventListener(Event.ADDED_TO_STAGE, pre_init);
}
}
/**
* 事前処理
*/
private function pre_init():void {
removeEventListener(Event.ADDED_TO_STAGE, pre_init);
if(!stage) {
return;
}
// http://wonderfl.net/c/7YEyこちらのデータをロード
var base:MyLoader = new MyLoader("http://swf.wonderfl.net/swf/usercode/3/37/37ea/37ea71571d353e8be4841dd5730420e9bb4cfb85.swf?", function():void {
var HelperClass:Class = base.getClass("ComponentHelper");
helper = new HelperClass();
helper.gray();
logger = helper.logger();
logger.setup(stage);
init();
});
}
/**
* 初期化
*/
private function init():void {
var panel:* = helper.base({parent:this, left:10, top:10, width:stage.stageWidth - 20, height:stage.stageHeight - 20, log:true});
var text:* = helper.inputText({parent:panel, left: 10, top:10});
helper.button({parent:panel, left:10, top:30, text: "hello", func: function():void{
text.text = "hello";
}});
var skinSelector:* = helper.comboBox({parent:panel, left: 10, top: 50, "default":"Gray", list:["Red", "Blue", "Orange", "Green", "Aqua", "Gray"]});
skinSelector.addEventListener(Event.SELECT, function(event:Event):void {
switch(skinSelector.selectedItem) {
case "Red":helper.red();break;
case "Blue":helper.blue();break;
case "Orange":helper.orange();break;;
case "Green":helper.green();break;
case "Aqua":helper.aqua();break;
case "Gray":
default:helper.gray();break;
}
helper.refresh(stage);
});
helper.textArea({parent:panel, left:10, top: 70, width:200, height:100, text: "textarea"});
helper.label({parent:panel, left:10, top:170, text: "ラベルです"});
helper.hSlider({parent:panel, left:10, top:190});
}
}
}
import flash.display.LoaderInfo;
import flash.system.ApplicationDomain;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.Loader;
/**
* ロード動作の補助
*/
class MyLoader {
private var domain:ApplicationDomain = null;
public function MyLoader(url:String, func:Function) {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(event:Event):void {
domain = LoaderInfo(event.target).applicationDomain;
func();
});
loader.load(new URLRequest(url + (new Date()).getTime()));
}
public function getClass(name:String):Class {
if(domain == null) {
throw new Error("loading is not complete yet...");
}
return domain.getDefinition(name) as Class;
}
}
