Powerful and fast macro-based data binding engine inspired by Flex Bindings with easy-to-use syntax.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
test
.gitignore
README.md
bindx.hxml
pom.xml
test.hxml

README.md

bindx

Powerful and fast macro-based data binding engine inspired by Flex Bindings with easy-to-use syntax.

====

Basic Usage

Bind field

@bindable class Value implements IBindable {
	
	public var a:Int;
	
	// doesn't change setter automatic
	@bindable({force:true}) public var b(get, set):Int;
	
	function get_b():Int {
		return a;
	}
	
	function set_b(v:Int):Int {
		var old = a;
		Bind.notify(this.b, old, a = v); // this.b.notify(old, a = v);
		return a;
	}
	
	public function new() {
		
	}
}

...

using bindx.Bind;
...

var v = new Value();
v.a = 12;

var a = { t:0 };
var unbindTo = v.a.bindxTo(a.t); // a.t == 12

var unbind = v.a.bindx(function (from:Int, to:Int) { trace('v.a changed from:$from to:$to'); } );
v.a = 10; // v.a changed from 12 to 10

unbind();
unbindTo();

// Bind.unbindx - not recursive only
var listener = function (from, to) { trace('$from -> $to'); };
v.a.bindx(listener);
v.a.unbind(listener);

Bind method

using bindx.Bind;

class Value implements IBindable {
	
	@bindable public var a:Int;
	
	@bindable public function toString() {
		return Std.string("Value: a=" + a);
	
	public function update() {
		toString.notify();  // bindx.Bind.notify(this.toString);
	}
	
	public function new() {
		
	}
}

...

using bindx.Bind;
...

var v = new Value();
v.a = 12;

var unbind = v.toString.bindx(function (res:String) { trace(res); } ); // Value: a=12

v.a = 0;
v.update(); // Value: a=0

v.a = 5;
v.toString.notify(); // Value: a=5

unbind();

Recursive fields and methods bind https://github.com/HxJointForces/bindx/blob/master/test/main/TestDeepBind.hx