Browse Source

fix value-to-view binding

Falko Schindler 4 years ago
parent
commit
c64bb3b8e8

+ 0 - 4
nicegui/elements/bool_element.py

@@ -11,7 +11,3 @@ class BoolElement(ValueElement):
                  on_change: Callable):
 
         super().__init__(view, design, value, on_change)
-
-    def set_view_value(self, value: bool):
-
-        self.view.value = value

+ 0 - 7
nicegui/elements/choice_element.py

@@ -17,10 +17,3 @@ class ChoiceElement(ValueElement):
             view.options = [{'label': value, 'value': key} for key, value in options.items()]
 
         super().__init__(view, design, value, on_change)
-
-    def set_view_value(self, value: any):
-
-        try:
-            self.view.value = value['value']
-        except TypeError:
-            self.view.value = value

+ 4 - 4
nicegui/elements/float_element.py

@@ -15,11 +15,11 @@ class FloatElement(ValueElement):
 
         super().__init__(view, design, value, on_change)
 
-    def set_view_value(self, value: float):
+    def value_to_view(self, value: float):
 
         if value is None:
-            self.view.value = None
+            return None
         elif self.format is None:
-            self.view.value = str(value)
+            return str(value)
         else:
-            self.view.value = self.format % float(value)
+            return self.format % float(value)

+ 8 - 0
nicegui/elements/select.py

@@ -13,3 +13,11 @@ class Select(ChoiceElement):
         view = jp.QSelect(options=options, input=self.handle_change)
 
         super().__init__(view, design, value, options, on_change)
+
+    def value_to_view(self, value: any):
+
+        matches = [o for o in self.view.options if o['value'] == value]
+        if any(matches):
+            return matches[0]['label']
+        else:
+            return value

+ 0 - 4
nicegui/elements/string_element.py

@@ -11,7 +11,3 @@ class StringElement(ValueElement):
                  on_change: Callable):
 
         super().__init__(view, design, value, on_change)
-
-    def set_view_value(self, value: str):
-
-        self.view.value = value

+ 5 - 1
nicegui/elements/value_element.py

@@ -19,7 +19,11 @@ class ValueElement(Element):
 
         self.on_change = on_change
         self.value = value
-        self.value.bind_to(self.view.value)
+        self.value.bind_to(self.view.value, forward=self.value_to_view)
+
+    def value_to_view(self, value):
+
+        return value
 
     def handle_change(self, msg):