浏览代码

transmit all event args by default

Falko Schindler 1 年之前
父节点
当前提交
942c498801
共有 2 个文件被更改,包括 8 次插入2 次删除
  1. 1 0
      nicegui/nicegui.py
  2. 7 2
      nicegui/templates/index.html

+ 1 - 0
nicegui/nicegui.py

@@ -170,6 +170,7 @@ def handle_event(sid: str, msg: Dict) -> None:
     with client:
         sender = client.elements.get(msg['id'])
         if sender:
+            msg['args'] = json.loads(msg['args'])
             sender._handle_event(msg)
 
 

+ 7 - 2
nicegui/templates/index.html

@@ -44,6 +44,12 @@
       const loaded_components = new Set();
       const elements = {{ elements | safe }};
 
+      function stringifyEvent(e) {
+        const obj = {};
+        for (let k in e) obj[k] = e[k];
+        return JSON.stringify(obj, (k, v) => v instanceof Node || v instanceof Window ? undefined : v);
+      }
+
       const waitingCallbacks = new Map();
       function throttle(callback, time, leading, trailing, id) {
         if (time <= 0) {
@@ -103,8 +109,7 @@
           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 all = (typeof e !== 'object' || e === null) || !event.args;
-            const args = all ? e : Object.fromEntries(event.args.map(a => [a, e[a]]));
+            const args = stringifyEvent(event.args ? Object.fromEntries(event.args.map(a => [a, e[a]])) : e);
             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") {