From af30b4003b798a0aabbf4b19d6f58d25ff51fa38 Mon Sep 17 00:00:00 2001 From: Dima Granetchi Date: Fri, 19 Dec 2014 18:49:54 +0200 Subject: [PATCH] ru readme --- README.md | 8 +--- README_ru.md | 100 +++++++++++++++++++++++++++++++++++++++++++ src/bindx/BindExt.hx | 2 +- 3 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 README_ru.md diff --git a/README.md b/README.md index c7f588d..6db401d 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,4 @@ -bindx2 - связывание данных +bindx2 ====== -Кроссплатформенная библиотека для связывания данных на haxe. - [![Build Status](https://travis-ci.org/profelis/bindx2.svg?branch=master)](https://travis-ci.org/profelis/bindx2) - -====== - -Возможности diff --git a/README_ru.md b/README_ru.md new file mode 100644 index 0000000..eeeb76b --- /dev/null +++ b/README_ru.md @@ -0,0 +1,100 @@ +bindx2 - связывание данных +====== + +Кроссплатформенная библиотека для связывания данных на haxe. + +[![Build Status](https://travis-ci.org/profelis/bindx2.svg?branch=master)](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, to:Null) { + 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 | Подробный лог по всем подпискам (полезен при дебаге) diff --git a/src/bindx/BindExt.hx b/src/bindx/BindExt.hx index a526329..9d2efd2 100644 --- a/src/bindx/BindExt.hx +++ b/src/bindx/BindExt.hx @@ -41,7 +41,7 @@ class BindExt { return internalBindExpr(expr, macro function (_, to:Null<$type>) $target = to); } - @:noUsing macro static public function chain(expr:ExprOf, listener:ExprOf->Null->Void>):ExprOfVoid> { + @:noUsing macro static public function chain(expr:ExprOf, listener:Expr):ExprOfVoid> { return internalBindChain(expr, listener); }