Browse Source

fix event argument filter for some value elements

Falko Schindler 1 year ago
parent
commit
26bf9bf372

+ 1 - 1
nicegui/elements/mixins/value_element.py

@@ -29,7 +29,7 @@ class ValueElement(Element):
             self._send_update_on_value_change = self.LOOPBACK
             self.set_value(self._event_args_to_value(e))
             self._send_update_on_value_change = True
-        self.on(f'update:{self.VALUE_PROP}', handle_change, throttle=throttle)
+        self.on(f'update:{self.VALUE_PROP}', handle_change, [None], throttle=throttle)
 
     def bind_value_to(self,
                       target_object: Any,

+ 1 - 1
nicegui/elements/toggle.py

@@ -24,7 +24,7 @@ class Toggle(ChoiceElement, DisableableElement):
         super().__init__(tag='q-btn-toggle', options=options, value=value, on_change=on_change)
 
     def _event_args_to_value(self, e: GenericEventArguments) -> Any:
-        return self._values[e.args[0]]
+        return self._values[e.args]
 
     def _value_to_model_value(self, value: Any) -> Any:
         return self._values.index(value) if value in self._values else None

+ 6 - 8
nicegui/templates/index.html

@@ -45,25 +45,23 @@
       const elements = {{ elements | safe }};
 
       function stringifyEventArgs(args, event_args) {
-        return args.map((arg, i) => {
+        const result = [];
+        args.forEach((arg, i) => {
+          if (i >= event_args.length) return;
           let filtered = {};
           if (typeof arg !== 'object' || arg === null || Array.isArray(arg)) {
             filtered = arg;
           }
           else {
             for (let k in arg) {
-              if (event_args[i] === undefined || event_args[i] === null || event_args[i].includes(k)) {
+              if (event_args[i] === null || event_args[i].includes(k)) {
                 filtered[k] = arg[k];
               }
             }
           }
-          if (arg instanceof Event) {
-            return JSON.stringify(filtered, (k, v) => v instanceof Node || v instanceof Window ? undefined : v);
-          }
-          else {
-            return JSON.stringify(filtered);
-          }
+          result.push(JSON.stringify(filtered, (k, v) => v instanceof Node || v instanceof Window ? undefined : v));
         });
+        return result;
       }
 
       const waitingCallbacks = new Map();