Procházet zdrojové kódy

Fix event handler lambdas (#804)

Nikhil Rao před 2 roky
rodič
revize
45f533db27
2 změnil soubory, kde provedl 10 přidání a 1 odebrání
  1. 2 0
      pynecone/app.py
  2. 8 1
      pynecone/state.py

+ 2 - 0
pynecone/app.py

@@ -397,6 +397,7 @@ class App(Base):
         compiler.compile_theme(self.style)
 
         # Compile the pages.
+        self.state.set_handlers()
         custom_components = set()
         for route, component in self.pages.items():
             component.add_style(self.style)
@@ -408,6 +409,7 @@ class App(Base):
         # Compile the custom components.
         compiler.compile_components(custom_components)
 
+        # To support calling event handlers from other handlers.
         self.state.convert_handlers_to_fns()
 
 

+ 8 - 1
pynecone/state.py

@@ -185,7 +185,8 @@ class State(Base, ABC):
         for name, fn in events.items():
             event_handler = EventHandler(fn=fn)
             cls.event_handlers[name] = event_handler
-            setattr(cls, name, event_handler)
+
+        cls.set_handlers()
 
     @classmethod
     def convert_handlers_to_fns(cls):
@@ -196,6 +197,12 @@ class State(Base, ABC):
         for name, event_handler in cls.event_handlers.items():
             setattr(cls, name, event_handler.fn)
 
+    @classmethod
+    def set_handlers(cls):
+        """Set the state class handlers."""
+        for name, event_handler in cls.event_handlers.items():
+            setattr(cls, name, event_handler)
+
     @classmethod
     @functools.lru_cache()
     def get_parent_state(cls) -> Optional[Type[State]]: