Support event subscriptions in iced_web
Also improves the overall web runtime, avoiding nested update loops.
This commit is contained in:
parent
f5186f31f1
commit
6d46833eb2
12 changed files with 112 additions and 129 deletions
|
|
@ -163,10 +163,8 @@ where
|
|||
if let Some(on_press) = self.on_press.clone() {
|
||||
let event_bus = bus.clone();
|
||||
|
||||
node = node.on("click", move |root, vdom, _event| {
|
||||
event_bus.publish(on_press.clone(), root);
|
||||
|
||||
vdom.schedule_render();
|
||||
node = node.on("click", move |_root, _vdom, _event| {
|
||||
event_bus.publish(on_press.clone());
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,9 +84,9 @@ where
|
|||
input(bump)
|
||||
.attr("type", "checkbox")
|
||||
.bool_attr("checked", self.is_checked)
|
||||
.on("click", move |root, vdom, _event| {
|
||||
.on("click", move |_root, vdom, _event| {
|
||||
let msg = on_toggle(!is_checked);
|
||||
event_bus.publish(msg, root);
|
||||
event_bus.publish(msg);
|
||||
|
||||
vdom.schedule_render();
|
||||
})
|
||||
|
|
|
|||
|
|
@ -93,10 +93,8 @@ where
|
|||
.attr("type", "radio")
|
||||
.attr("style", "margin-right: 10px")
|
||||
.bool_attr("checked", self.is_selected)
|
||||
.on("click", move |root, vdom, _event| {
|
||||
event_bus.publish(on_click.clone(), root);
|
||||
|
||||
vdom.schedule_render();
|
||||
.on("click", move |_root, _vdom, _event| {
|
||||
event_bus.publish(on_click.clone());
|
||||
})
|
||||
.finish(),
|
||||
text(radio_label.into_bump_str()),
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ where
|
|||
.attr("max", max.into_bump_str())
|
||||
.attr("value", value.into_bump_str())
|
||||
.attr("style", "width: 100%")
|
||||
.on("input", move |root, vdom, event| {
|
||||
.on("input", move |_root, _vdom, event| {
|
||||
let slider = match event.target().and_then(|t| {
|
||||
t.dyn_into::<web_sys::HtmlInputElement>().ok()
|
||||
}) {
|
||||
|
|
@ -120,8 +120,7 @@ where
|
|||
};
|
||||
|
||||
if let Ok(value) = slider.value().parse::<f32>() {
|
||||
event_bus.publish(on_change(value), root);
|
||||
vdom.schedule_render();
|
||||
event_bus.publish(on_change(value));
|
||||
}
|
||||
})
|
||||
.finish()
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ where
|
|||
"type",
|
||||
bumpalo::format!(in bump, "{}", if self.is_secure { "password" } else { "text" }).into_bump_str(),
|
||||
)
|
||||
.on("input", move |root, vdom, event| {
|
||||
.on("input", move |_root, _vdom, event| {
|
||||
let text_input = match event.target().and_then(|t| {
|
||||
t.dyn_into::<web_sys::HtmlInputElement>().ok()
|
||||
}) {
|
||||
|
|
@ -183,8 +183,7 @@ where
|
|||
Some(text_input) => text_input,
|
||||
};
|
||||
|
||||
event_bus.publish(on_change(text_input.value()), root);
|
||||
vdom.schedule_render();
|
||||
event_bus.publish(on_change(text_input.value()));
|
||||
})
|
||||
.finish()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue