Add the following code to a client module, say utils.py
.
from anvil.js import window, get_dom_node
def set_id(component, id):
get_dom_node(component).setAttribute("id", id)
def set_component_ids(form):
module = form.__class__.__module__.lower()
for attr_name in dir(form):
potential_component = getattr(form, attr_name)
try:
set_id(potential_component, f"{module}.{attr_name}")
except TypeError:
pass
Then you can import set_component_ids
into all of your forms and use it in the form’s __init__
:
from .utils import set_component_ids
class form_1(form_1Template):
def __init__(self, **properties):
self.init_components(**properties)
set_component_ids(self)
Then boom, your DOM nodes have unique IDs . The IDs have the following structure:
<app_name>.<dir>.<component_name>
, where <dir>
is the location of your component, including any packages or parent forms that your component’s form might be nested in.
I used ideas from this topic so thanks and proper dues to Owen and Meredydd