浏览代码

update ui.input after server-side value change (fixes #1071)

Falko Schindler 1 年之前
父节点
当前提交
cd5f31a78b
共有 3 个文件被更改,包括 24 次插入0 次删除
  1. 3 0
      nicegui/elements/input.js
  2. 5 0
      nicegui/elements/input.py
  3. 16 0
      tests/test_input.py

+ 3 - 0
nicegui/elements/input.js

@@ -47,6 +47,9 @@ export default {
     },
   },
   methods: {
+    updateValue() {
+      this.inputValue = this.value;
+    },
     perform_autocomplete(e) {
       if (this.shadowText) {
         this.inputValue += this.shadowText;

+ 5 - 0
nicegui/elements/input.py

@@ -62,3 +62,8 @@ class Input(ValidationElement, DisableableElement):
         """Set the autocomplete list."""
         self._props['autocomplete'] = autocomplete
         self.update()
+
+    def on_value_change(self, value: Any) -> None:
+        super().on_value_change(value)
+        if self._send_update_on_value_change:
+            self.run_method('updateValue')

+ 16 - 0
tests/test_input.py

@@ -125,3 +125,19 @@ def test_clearable_input(screen: Screen):
     screen.should_contain('value: foo')
     screen.click('cancel')
     screen.should_contain('value: None')
+
+
+def test_update_input(screen: Screen):
+    input = ui.input('Name', value='Pete')
+
+    screen.open('/')
+    element = screen.selenium.find_element(By.XPATH, '//*[@aria-label="Name"]')
+    assert element.get_attribute('value') == 'Pete'
+
+    element.send_keys('r')
+    screen.wait(0.5)
+    assert element.get_attribute('value') == 'Peter'
+
+    input.value = 'Pete'
+    screen.wait(0.5)
+    assert element.get_attribute('value') == 'Pete'