Merge pull request #14 from sinnus/master
Cool, thanks. Travix php build failed. But who cares. Merged
This commit is contained in:
+29
-21
@@ -12,18 +12,22 @@ class SignalTools {
|
|||||||
* @param bindable - target object
|
* @param bindable - target object
|
||||||
*/
|
*/
|
||||||
static public function unbindAll(bindable:bindx.IBindable):Void {
|
static public function unbindAll(bindable:bindx.IBindable):Void {
|
||||||
var meta = haxe.rtti.Meta.getFields(std.Type.getClass(bindable));
|
var clazz:Class<Dynamic> = std.Type.getClass(bindable);
|
||||||
if (meta != null) for (m in std.Reflect.fields(meta)) {
|
while (clazz != null) {
|
||||||
var data = std.Reflect.field(meta, m);
|
var meta = haxe.rtti.Meta.getFields(clazz);
|
||||||
if (std.Reflect.hasField(data, BIND_SIGNAL_META)) {
|
if (meta != null) for (m in std.Reflect.fields(meta)) {
|
||||||
var signal:bindx.BindSignal.Signal<Dynamic> = cast std.Reflect.field(bindable, m);
|
var data = std.Reflect.field(meta, m);
|
||||||
if (signal != null) {
|
if (std.Reflect.hasField(data, BIND_SIGNAL_META)) {
|
||||||
signal.removeAll();
|
var signal:bindx.BindSignal.Signal<Dynamic> = cast std.Reflect.field(bindable, m);
|
||||||
var args:Array<Dynamic> = std.Reflect.field(data, BIND_SIGNAL_META);
|
if (signal != null) {
|
||||||
var lazy:Bool = args[1];
|
signal.removeAll();
|
||||||
if (lazy) std.Reflect.setField(bindable, m, null);
|
var args:Array<Dynamic> = std.Reflect.field(data, BIND_SIGNAL_META);
|
||||||
|
var lazy:Bool = args[1];
|
||||||
|
if (lazy) std.Reflect.setField(bindable, m, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
clazz = std.Type.getSuperClass(clazz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,19 +72,23 @@ class SignalTools {
|
|||||||
*/
|
*/
|
||||||
static public function getSignals(bindable:bindx.IBindable, force = true):Map<String, bindx.BindSignal.Signal<Function>> {
|
static public function getSignals(bindable:bindx.IBindable, force = true):Map<String, bindx.BindSignal.Signal<Function>> {
|
||||||
var signals = new Map<String, bindx.BindSignal.Signal<Function>>();
|
var signals = new Map<String, bindx.BindSignal.Signal<Function>>();
|
||||||
var meta = haxe.rtti.Meta.getFields(std.Type.getClass(bindable));
|
var clazz:Class<Dynamic> = std.Type.getClass(bindable);
|
||||||
if (meta != null) for (m in std.Reflect.fields(meta)) {
|
while (clazz != null) {
|
||||||
var data = std.Reflect.field(meta, m);
|
var meta = haxe.rtti.Meta.getFields(clazz);
|
||||||
if (std.Reflect.hasField(data, BIND_SIGNAL_META)) {
|
if (meta != null) for (m in std.Reflect.fields(meta)) {
|
||||||
var args:Array<Dynamic> = std.Reflect.field(data, BIND_SIGNAL_META);
|
var data = std.Reflect.field(meta, m);
|
||||||
var signal:bindx.BindSignal.Signal<Function> = cast std.Reflect.field(bindable, m);
|
if (std.Reflect.hasField(data, BIND_SIGNAL_META)) {
|
||||||
if (signal == null && force) {
|
var args:Array<Dynamic> = std.Reflect.field(data, BIND_SIGNAL_META);
|
||||||
var lazy:Bool = args[1];
|
var signal:bindx.BindSignal.Signal<Function> = cast std.Reflect.field(bindable, m);
|
||||||
if (lazy) signal = cast std.Reflect.getProperty(bindable, m.substr(1));
|
if (signal == null && force) {
|
||||||
|
var lazy:Bool = args[1];
|
||||||
|
if (lazy) signal = cast std.Reflect.getProperty(bindable, m.substr(1));
|
||||||
|
}
|
||||||
|
var name = args[0];
|
||||||
|
signals.set(name, signal);
|
||||||
}
|
}
|
||||||
var name = args[0];
|
|
||||||
signals.set(name, signal);
|
|
||||||
}
|
}
|
||||||
|
clazz = std.Type.getSuperClass(clazz);
|
||||||
}
|
}
|
||||||
return signals;
|
return signals;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,31 @@ class InheritanceTest extends BuddySuite {
|
|||||||
bp.i = 2;
|
bp.i = 2;
|
||||||
callNum.should.be(3);
|
callNum.should.be(3);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("bindx should support class inheritance for bindAll", function () {
|
||||||
|
b.s = "a";
|
||||||
|
Bind.bindAll(b, function (_, _, _) callNum++, true);
|
||||||
|
b.s = "b";
|
||||||
|
callNum.should.be(1);
|
||||||
|
b.i = 1;
|
||||||
|
callNum.should.be(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("bindx should support class inheritance for unbindAll", function () {
|
||||||
|
b.i = 1;
|
||||||
|
b.s = "a";
|
||||||
|
Bind.bind(b.i, function (_, _) callNum++);
|
||||||
|
Bind.bind(b.s, function (_, _) callNum++);
|
||||||
|
|
||||||
|
b.i = 2;
|
||||||
|
b.s = "b";
|
||||||
|
callNum.should.be(2);
|
||||||
|
Bind.unbindAll(b);
|
||||||
|
|
||||||
|
b.i = 3;
|
||||||
|
b.s = "c";
|
||||||
|
callNum.should.be(2);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user