Added add_event_listener and remove_event_listener
This commit is contained in:
79
README.md
79
README.md
@@ -150,6 +150,82 @@ data.value = "final"
|
||||
# Callback2: test -> final
|
||||
```
|
||||
|
||||
#### Event listener
|
||||
I can register a listener for the `ObservableEvent.AFTER_PROPERTY_CHANGE` event.
|
||||
|
||||
```python
|
||||
from dataclasses import dataclass
|
||||
from myutils.observable import make_observable, bind, add_event_listener, ObservableEvent
|
||||
|
||||
@dataclass
|
||||
class Data:
|
||||
number: int = 1
|
||||
|
||||
data = Data()
|
||||
make_observable(data)
|
||||
|
||||
on_change_results = []
|
||||
on_after_change_results = []
|
||||
|
||||
def on_change(old, new):
|
||||
on_change_results.append((old, new))
|
||||
return new + 1
|
||||
|
||||
def on_after_change(attr, old, new, results):
|
||||
on_after_change_results.append((attr, old, new, results))
|
||||
|
||||
bind(data, 'number', on_change)
|
||||
add_event_listener(ObservableEvent.AFTER_PROPERTY_CHANGE, data, "number", on_after_change)
|
||||
|
||||
data.number = 5
|
||||
data.number = 10
|
||||
|
||||
assert on_change_results == [(1, 5), (5, 10)]
|
||||
assert on_after_change_results == [("number", 1, 5, [6]), ("number", 5, 10, [11])]
|
||||
```
|
||||
|
||||
I can register for all attributes change events.
|
||||
|
||||
```python
|
||||
|
||||
from myutils.observable import make_observable, bind, add_event_listener, ObservableEvent
|
||||
|
||||
|
||||
class Data:
|
||||
number: int = 1
|
||||
value: str = "initial"
|
||||
|
||||
|
||||
data = Data()
|
||||
make_observable(data)
|
||||
|
||||
|
||||
def on_change_1(old, new):
|
||||
return new
|
||||
|
||||
|
||||
def on_change_2(old, new):
|
||||
return str(new) + "_1"
|
||||
|
||||
|
||||
on_after_change_results = []
|
||||
|
||||
|
||||
def on_after_change(attr, old, new, results):
|
||||
on_after_change_results.append((attr, old, new, results))
|
||||
|
||||
|
||||
add_event_listener(ObservableEvent.AFTER_PROPERTY_CHANGE, data, "", on_after_change)
|
||||
bind(data, 'number', on_change_1)
|
||||
bind(data, 'number', on_change_2)
|
||||
bind(data, 'value', on_change_1)
|
||||
|
||||
data.number = 5
|
||||
data.value = "new value"
|
||||
|
||||
assert on_after_change_results == [("number", 1, 5, [5, "5_1"]), ("value", "initial", "new value", ["new value"])]
|
||||
```
|
||||
|
||||
#### Using Helper Functions
|
||||
|
||||
```python
|
||||
@@ -319,4 +395,5 @@ Special thanks to the Python and open-source community for their tools, inspirat
|
||||
|
||||
* 0.1.0 : Initial release
|
||||
* 0.2.0 : Observable results can be collected using `collect_return_values`
|
||||
* 0.3.0 : Added `unbind`, `unbind_all`, `has_listeners` `get_listener_count` to Observable
|
||||
* 0.3.0 : Added `unbind`, `unbind_all`, `has_listeners` `get_listener_count` to Observable
|
||||
* 0.4.0 : Added `add_event_listener` and `remove_event_listener`
|
||||
Reference in New Issue
Block a user