1
0
Эх сурвалжийг харах

send additional event args to server

Falko Schindler 1 жил өмнө
parent
commit
e75341d2d9

+ 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]
+        return self._values[e.args[0]]
 
     def _value_to_model_value(self, value: Any) -> Any:
         return self._values.index(value) if value in self._values else None

+ 3 - 1
nicegui/nicegui.py

@@ -170,7 +170,9 @@ def handle_event(sid: str, msg: Dict) -> None:
     with client:
         sender = client.elements.get(msg['id'])
         if sender:
-            msg['args'] = json.loads(msg.get('args', 'null'))
+            msg['args'] = [json.loads(arg) for arg in msg.get('args', [])]
+            if len(msg['args']) == 1:
+                msg['args'] = msg['args'][0]
             sender._handle_event(msg)
 
 

+ 3 - 3
nicegui/templates/index.html

@@ -113,12 +113,12 @@
         element.events.forEach((event) => {
           let event_name = 'on' + event.type[0].toLocaleUpperCase() + event.type.substring(1);
           event.specials.forEach(s => event_name += s[0].toLocaleUpperCase() + s.substring(1));
-          let handler = (e) => {
-            const args = stringifyEvent(event.args ? Object.fromEntries(event.args.map(a => [a, e[a]])) : e);
+          let handler = (...event_args) => {
+            const args = event_args.map(stringifyEvent);
             const emitter = () => window.socket.emit("event", {id: element.id, listener_id: event.listener_id, args});
             throttle(emitter, event.throttle, event.leading_events, event.trailing_events, event.listener_id);
             if (element.props["loopback"] === False && event.type == "update:model-value") {
-              element.props["model-value"] = e;
+              element.props["model-value"] = event_args;
             }
           };
           handler = Vue.withModifiers(handler, event.modifiers);