added builder

This commit is contained in:
2013-10-30 10:33:34 +04:00
parent 0b186ad81f
commit 71a149c2b2
6 changed files with 41 additions and 13 deletions

View File

@@ -6,7 +6,7 @@ class LabelView extends TextView {
public function new() { public function new() {
super(); super();
textField.autoSize = TextFieldAutoSize.CENTER; textField.autoSize = TextFieldAutoSize.LEFT;
} }
override public function update():Void { override public function update():Void {

View File

@@ -7,28 +7,39 @@ import haxework.net.ILoader.Method;
class BaseLoader<T> implements ILoader<T> { class BaseLoader<T> implements ILoader<T> {
private var busy:Bool; public static var urlProcessors(default, null):Array<String->String> = new Array<String->String>();
public var busy(default, null):Bool;
private var url:String; private var url:String;
private var data:Null<Dynamic>;
private var callback:ICallback<T>; private var callback:ICallback<T>;
public function new() { public function new() {
busy = false; busy = false;
} }
public function request(url:String, method:Method):ICallback<T> { public function request(url:String, method:Method, data:Dynamic = null):ICallback<T> {
if (busy) throw "Busy"; if (busy) throw "Busy";
busy = true; busy = true;
this.url = url; this.url = url;
this.data = data;
callback = new Callback<T>(); callback = new Callback<T>();
internalRequest(); var url:String = this.url;
for (p in urlProcessors) url = p(url);
internalRequest(url);
return callback; return callback;
} }
public function GET(url:String):ICallback<T> { public function GET(url:String, data:Dynamic = null):ICallback<T> {
return request(url, Method.GET); return request(url, Method.GET, data);
} }
private function internalRequest():Void { public function POST(url:String, data:Dynamic = null):ICallback<T> {
return request(url, Method.POST, data);
}
private function internalRequest(url:String):Void {
throw "Abstract"; throw "Abstract";
} }
@@ -52,6 +63,7 @@ class BaseLoader<T> implements ILoader<T> {
private function dispose():Void { private function dispose():Void {
url = null; url = null;
data = null;
callback = null; callback = null;
busy = false; busy = false;
} }

View File

@@ -11,7 +11,7 @@ class BaseMediaLoader<T> extends BaseLoader<T> {
private var loader:Loader; private var loader:Loader;
override private function internalRequest():Void { override private function internalRequest(url:String):Void {
loader = buildLoader(); loader = buildLoader();
loader.load(new URLRequest(url)); loader.load(new URLRequest(url));
} }

View File

@@ -17,9 +17,11 @@ class BaseURLLoader<T> extends BaseLoader<T> {
dataFormat = URLLoaderDataFormat.TEXT; dataFormat = URLLoaderDataFormat.TEXT;
} }
override private function internalRequest():Void { override private function internalRequest(url:String):Void {
loader = buildLoader(); loader = buildLoader();
loader.load(new URLRequest(url)); var request:URLRequest = new URLRequest(url);
if (data != null) request.data = data;
loader.load(request);
} }
private function buildLoader():URLLoader { private function buildLoader():URLLoader {

View File

@@ -8,8 +8,9 @@ enum Method {
} }
interface ILoader<T> { interface ILoader<T> {
public function request(url:String, method:Method):ICallback<T>; public var busy(default, null):Bool;
public function GET(url:String):ICallback<T>; public function request(url:String, method:Method, data:Dynamic = null):ICallback<T>;
public function GET(url:String, data:Dynamic = null):ICallback<T>;
public function POST(url:String, data:Dynamic = null):ICallback<T>;
public function cancel():Void; public function cancel():Void;
} }

13
haxework/utils/Builder.hx Executable file
View File

@@ -0,0 +1,13 @@
package haxework.utils;
class Builder {
public static function build<T>(type:String, data:Array<Dynamic> = null):Null<T> {
var clazz:Class<Dynamic> = Type.resolveClass(type);
if (clazz != null) {
var recipe:Dynamic = Type.createInstance(clazz, data == null ? [] : data);
return cast recipe;
}
return null;
}
}