ru readme
This commit is contained in:
@@ -1,10 +1,4 @@
|
|||||||
bindx2 - связывание данных
|
bindx2
|
||||||
======
|
======
|
||||||
|
|
||||||
Кроссплатформенная библиотека для связывания данных на haxe.
|
|
||||||
|
|
||||||
[](https://travis-ci.org/profelis/bindx2)
|
[](https://travis-ci.org/profelis/bindx2)
|
||||||
|
|
||||||
======
|
|
||||||
|
|
||||||
Возможности
|
|
||||||
|
|||||||
+100
@@ -0,0 +1,100 @@
|
|||||||
|
bindx2 - связывание данных
|
||||||
|
======
|
||||||
|
|
||||||
|
Кроссплатформенная библиотека для связывания данных на haxe.
|
||||||
|
|
||||||
|
[](https://travis-ci.org/profelis/bindx2)
|
||||||
|
|
||||||
|
======
|
||||||
|
|
||||||
|
Возможности:
|
||||||
|
|
||||||
|
- автоматическая генерация сигналов, оповещающих об изменениях свойств или методов класса,
|
||||||
|
- удобное API для подписки на изменения свойств или методов класса,
|
||||||
|
- расширенное API для связывания произвольного выражения,
|
||||||
|
- API для быстрого связывания свойств
|
||||||
|
|
||||||
|
======
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
```haxe
|
||||||
|
// UserModel.hx
|
||||||
|
|
||||||
|
import bindx.IBindable;
|
||||||
|
|
||||||
|
@:bindable
|
||||||
|
class UserModel implements IBindable
|
||||||
|
{
|
||||||
|
public var name:String;
|
||||||
|
public var coins:Int;
|
||||||
|
|
||||||
|
public var health:Float = 1;
|
||||||
|
|
||||||
|
public function new(name:String, coins:Int) {
|
||||||
|
this.name = name;
|
||||||
|
this.coins = coins;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
...
|
||||||
|
```haxe
|
||||||
|
// bind complex expression with another field
|
||||||
|
unbindOldUser = BindExt.exprTo('Hello ${user.name}. You have ' + user.coins + " coins", this.textField.text);
|
||||||
|
|
||||||
|
// listen field changes
|
||||||
|
Bind.bind(user.health, onHealthChange);
|
||||||
|
|
||||||
|
function onHealthChange(from:Null<Float>, to:Null<Float>) {
|
||||||
|
trace('user health changed from $from to $to');
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
======
|
||||||
|
|
||||||
|
API:
|
||||||
|
|
||||||
|
Method | Description
|
||||||
|
------------ | -------------
|
||||||
|
`Bind.bind(expr, listener)` | `listener` вызывается при смене свойства или метода в `expr`. Слушатель свойства принимает 2 параметра, старое и новое значение свойства, метода - 0 параметров
|
||||||
|
`Bind.bindTo(expr, toExpr)` | Присваивает значение `expr` выражению `toExpr` (NB: в случае метода вызывает метод без параметров!). Автоматически первый вызов НЕ происходит
|
||||||
|
`Bind.notify(expr, oldValue, newValue)` | Ручной вызов оповещения об изменении свойства или метода (в случае метода ожидается только один аргумент в методе `notiry`)
|
||||||
|
`Bind.unbind(expr, listener)` | Удаляется подписка на изменения свойства (NB: если `listener` не указать, произойдет полная отписка всех слушателей!)
|
||||||
|
`Bind.unbindAll(obj:IBindable)` | Удаляются все подписки на изменения всех свойств и методов объекта (NB: дальнейшая подписка доступна!)
|
||||||
|
|
||||||
|
Расширенное API:
|
||||||
|
|
||||||
|
Method | Description
|
||||||
|
------------ | -------------
|
||||||
|
`BindExt.chain(chainExpr, listener)` | Подписка на последовательность вызовов `a.b.c(1).d..`, срабатывает при любом изменении в цепи вызово, автоматически отписываясь от предыдущего значения и подписываясь на новое. Методы доступно указывать с параметрами. (NB: первый раз `listener` вызывается автоматически). `listener` ведет себя аналогично как и в Bind.bind методе. Метод возвращает ссылку на функцию, позволяющую полностью отписаться.
|
||||||
|
`BindExt.chainTo(chainExpr, toExpr)` | Связывание выражения `chainExpr` с `toExpr`. (NB: первый раз связывание осуществляется автоматически). Метод возвращает ссылку на функцию, позволяющую полностью отписаться.
|
||||||
|
`BindExt.expr(expr, listener)` | Универсальный метод, `expr` может быть произвольным выражением, автоматически будут найдены все `IBindable` объекты и вызовы их свойств на которые можно подписаться. `listener` всегда принимает 2 параметра, в случае метода, предыдущее значение автоматически запомнимается. (NB: первый раз `listener` вызывается автоматически). Метод возвращает ссылку на функцию, позволяющую полностью отписаться.
|
||||||
|
`BindExt.exprTo(expr, toExpr)` | Связывание произвольного выражения `expr` с `toExpr`. (NB: первый раз `listener` вызывается автоматически). Метод возвращает ссылку на функцию, позволяющую полностью отписаться.
|
||||||
|
|
||||||
|
======
|
||||||
|
|
||||||
|
@:bindable meta:
|
||||||
|
|
||||||
|
`@:bindable` мета указанная для класса наследуется для всех публичных свойств без указанной `@:bindable` меты
|
||||||
|
|
||||||
|
Поддерживает дополнительные параметры `@:bindable(paramName1 = value, paramName2 = value ...)`
|
||||||
|
|
||||||
|
Parameter | Default value | Description
|
||||||
|
------------ | ------------- | -------------
|
||||||
|
inlineSetter | false | В случае когда у свойства сеттер отсутствовал и то сгенерируется автоматически. А свойство `inlineSetter` укажет добавить ему `inline` аксессор или нет
|
||||||
|
force | false | Режим игнорирует другие параметры, создает сигнал для оповещения об изменениях, но не генерирует сеттеры или редактирует существующий, позволяя программисту самому управлять оповещением об изменениях используя метов `Bind.notify`
|
||||||
|
lazySignal | true | Управляет правилом создания сигнала для оповещения. Сразу или автоматически при первом запросе (по умолчанию ленивая инициализация активна).
|
||||||
|
inlineSignalGetter | false | В случае ленивой инициализации сигнала, когда создается геттер для сигнала, добавляет `inline` аксессор данному геттеру. (NB: актуально только в случае `lazySignal = true`)
|
||||||
|
|
||||||
|
|
||||||
|
======
|
||||||
|
|
||||||
|
Логирование/дебаг:
|
||||||
|
|
||||||
|
```-D bindx_log=LOG_LEVEL```
|
||||||
|
|
||||||
|
Log level | Description
|
||||||
|
------------ | -------------
|
||||||
|
0 | Аналогично выключенному логированию
|
||||||
|
1 | Краткий формат логов (оптимальный вариант) (NB: доступна короткая запись -D bindx_log)
|
||||||
|
2 | Подробный лог по всем подпискам (полезен при дебаге)
|
||||||
@@ -41,7 +41,7 @@ class BindExt {
|
|||||||
return internalBindExpr(expr, macro function (_, to:Null<$type>) $target = to);
|
return internalBindExpr(expr, macro function (_, to:Null<$type>) $target = to);
|
||||||
}
|
}
|
||||||
|
|
||||||
@:noUsing macro static public function chain<T>(expr:ExprOf<T>, listener:ExprOf<Null<T>->Null<T>->Void>):ExprOf<Void->Void> {
|
@:noUsing macro static public function chain<T>(expr:ExprOf<T>, listener:Expr):ExprOf<Void->Void> {
|
||||||
return internalBindChain(expr, listener);
|
return internalBindChain(expr, listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user