value_element.py 830 B

123456789101112131415161718192021222324
  1. from typing import Any, Callable, Dict, Optional
  2. from ..element import Element
  3. from ..events import ValueChangeEventArguments, handle_event
  4. from .binding_mixins import BindValueMixin
  5. class ValueElement(Element, BindValueMixin):
  6. def __init__(self, tag: str, *, value: Any, on_change: Optional[Callable]) -> None:
  7. super().__init__(tag)
  8. self.change_handler = on_change
  9. self.value = value
  10. self._props['model-value'] = value
  11. def handle_change(msg: Dict) -> None:
  12. self.value = msg['args']
  13. self.on('update:model-value', handle_change)
  14. def on_value_change(self, value: str) -> None:
  15. self._props['model-value'] = value
  16. self.update()
  17. handle_event(self.change_handler, ValueChangeEventArguments(sender=self, client=self.client, value=value))