Send mount event when hydrating (#1764)
This commit is contained in:
1 parent
3733fbf47d
commit
0166eafafb
2 files changed
+29
-16
No files matched your search
+15
-11
@@ -256,17 +256,21 @@ impl WebsysDom {
|
|||||||
i.flush();
|
i.flush();
|
||||||
|
|
||||||
for id in to_mount {
|
for id in to_mount {
|
||||||
let node = get_node(id.0 as u32);
|
self.send_mount_event(id);
|
||||||
if let Some(element) = node.dyn_ref::<Element>() {
|
}
|
||||||
let data: MountedData = element.into();
|
}
|
||||||
let data = Rc::new(data);
|
|
||||||
let _ = self.event_channel.unbounded_send(UiEvent {
|
pub(crate) fn send_mount_event(&self, id: ElementId) {
|
||||||
name: "mounted".to_string(),
|
let node = get_node(id.0 as u32);
|
||||||
bubbles: false,
|
if let Some(element) = node.dyn_ref::<Element>() {
|
||||||
element: id,
|
let data: MountedData = element.into();
|
||||||
data,
|
let data = Rc::new(data);
|
||||||
});
|
let _ = self.event_channel.unbounded_send(UiEvent {
|
||||||
}
|
name: "mounted".to_string(),
|
||||||
|
bubbles: false,
|
||||||
|
element: id,
|
||||||
|
data,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ impl WebsysDom {
|
|||||||
children, attrs, ..
|
children, attrs, ..
|
||||||
} => {
|
} => {
|
||||||
let mut mounted_id = None;
|
let mut mounted_id = None;
|
||||||
|
let mut should_send_mount_event = true;
|
||||||
for attr in *attrs {
|
for attr in *attrs {
|
||||||
if let dioxus_core::TemplateAttribute::Dynamic { id } = attr {
|
if let dioxus_core::TemplateAttribute::Dynamic { id } = attr {
|
||||||
let attribute = &vnode.dynamic_attrs[*id];
|
let attribute = &vnode.dynamic_attrs[*id];
|
||||||
@@ -134,16 +135,24 @@ impl WebsysDom {
|
|||||||
let name = attribute.name;
|
let name = attribute.name;
|
||||||
if let AttributeValue::Listener(_) = value {
|
if let AttributeValue::Listener(_) = value {
|
||||||
let event_name = &name[2..];
|
let event_name = &name[2..];
|
||||||
self.interpreter.new_event_listener(
|
match event_name {
|
||||||
event_name,
|
"mounted" => should_send_mount_event = true,
|
||||||
id.0 as u32,
|
_ => {
|
||||||
event_bubbles(event_name) as u8,
|
self.interpreter.new_event_listener(
|
||||||
);
|
event_name,
|
||||||
|
id.0 as u32,
|
||||||
|
event_bubbles(event_name) as u8,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(id) = mounted_id {
|
if let Some(id) = mounted_id {
|
||||||
set_node(hydrated, id, current_child.clone()?);
|
set_node(hydrated, id, current_child.clone()?);
|
||||||
|
if should_send_mount_event {
|
||||||
|
self.send_mount_event(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if !children.is_empty() {
|
if !children.is_empty() {
|
||||||
let mut children_current_child = current_child
|
let mut children_current_child = current_child
|
||||||
|
|||||||
Reference in new issue
Block a user