import jQuery.*; typedef AsyncCallback = Dynamic -> Void class Havior { public static var com_name : String; public static function start(name, ?pos:haxe.PosInfos){ com_name = name; var klass = Type.resolveClass(pos.className); var class_name = StringTools.replace(name, "/", "-"); var coms = new JQuery(".havior-"+class_name); for(com in coms){ var id = new JQuery(com).attr("id"); var c = Type.createInstance(klass, [id]); c.onLoad(); } } public function onLoad(){} private var id : String; private var dom : JQuery; private var callbacks = new Map>(); public function new(id : String){ this.id = id; this.dom = new JQuery("#"+id); } public function getId(){ return this.id;} public function getDOM(){ return this.dom; } public function addCallback(route:String, func:AsyncCallback){ if(!this.callbacks.exists(route)){ this.callbacks.set(route, new Array()); } this.callbacks.get(route).push(func); } private function callCallback(route:String, data:Dynamic){ if(this.callbacks.exists(route)){ for(func in this.callbacks.get(route)){ func(data); } } } public function children(selector){ return new JQuery("#"+getId()+" ,#"+getId()+" *").children(selector); } public function getParams(){ return getDOM().data(); } public function getParam(name:String){ return Reflect.field(getParams(), name); } public function getParamNames(){ return Reflect.fields(getParams); } public function sendAsync(route:String, params:Dynamic){ var xs = route.split("@"); var action = xs[0]; var method = xs[1]; var url = "/havior/"+ com_name +"/"+ action; var callback = function(data,status,xhr){ callCallback(route, data); } var query = switch(method){ case "get": JQueryStatic.get(url, params, callback); case "post", _: JQueryStatic.post(url, params, callback); } query.fail(function(e){ trace("ERROR:"+e); }); } }