value_element.py 963 B

123456789101112131415161718192021222324252627282930
  1. from typing import Any, Callable, Dict, Optional
  2. import justpy as jp
  3. from ..binding import BindableProperty, BindValueMixin
  4. from ..events import ValueChangeEventArguments, handle_event
  5. from .element import Element
  6. class ValueElement(Element, BindValueMixin):
  7. value = BindableProperty(on_change=lambda sender, value: handle_event(
  8. sender.change_handler, ValueChangeEventArguments(sender=sender, socket=None, value=value)))
  9. def __init__(self, view: jp.HTMLBaseComponent, *, value: Any, on_change: Optional[Callable]) -> None:
  10. super().__init__(view)
  11. self.change_handler = on_change
  12. self.value = value
  13. self.bind_value_to(self.view, 'value', forward=self.value_to_view)
  14. def value_to_view(self, value):
  15. return value
  16. def set_value(self, value) -> None:
  17. self.value = value
  18. def handle_change(self, msg: Dict):
  19. self.value = msg['value']
  20. self.update()
  21. return False