diff options
author | 2020-02-04 03:28:47 +0100 | |
---|---|---|
committer | 2020-02-04 03:28:47 +0100 | |
commit | 6d46833eb2a068bd3655859ea828dad04293e5ba (patch) | |
tree | 42cbe1d9a65a2e03e63887611251ed8532f49872 /web/src/widget | |
parent | f5186f31f1e5eed8fe20c5d6e62e2f531fee6365 (diff) | |
download | iced-6d46833eb2a068bd3655859ea828dad04293e5ba.tar.gz iced-6d46833eb2a068bd3655859ea828dad04293e5ba.tar.bz2 iced-6d46833eb2a068bd3655859ea828dad04293e5ba.zip |
Support event subscriptions in `iced_web`
Also improves the overall web runtime, avoiding nested update loops.
Diffstat (limited to 'web/src/widget')
-rw-r--r-- | web/src/widget/button.rs | 6 | ||||
-rw-r--r-- | web/src/widget/checkbox.rs | 4 | ||||
-rw-r--r-- | web/src/widget/radio.rs | 6 | ||||
-rw-r--r-- | web/src/widget/slider.rs | 5 | ||||
-rw-r--r-- | web/src/widget/text_input.rs | 5 |
5 files changed, 10 insertions, 16 deletions
diff --git a/web/src/widget/button.rs b/web/src/widget/button.rs index e628bd18..6fef48ce 100644 --- a/web/src/widget/button.rs +++ b/web/src/widget/button.rs @@ -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()); }); } diff --git a/web/src/widget/checkbox.rs b/web/src/widget/checkbox.rs index 34d13a1b..1e864875 100644 --- a/web/src/widget/checkbox.rs +++ b/web/src/widget/checkbox.rs @@ -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(); }) diff --git a/web/src/widget/radio.rs b/web/src/widget/radio.rs index 4e7d02b8..6dd0ad45 100644 --- a/web/src/widget/radio.rs +++ b/web/src/widget/radio.rs @@ -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()), diff --git a/web/src/widget/slider.rs b/web/src/widget/slider.rs index fc955781..25c57933 100644 --- a/web/src/widget/slider.rs +++ b/web/src/widget/slider.rs @@ -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() diff --git a/web/src/widget/text_input.rs b/web/src/widget/text_input.rs index a478874a..078e05b2 100644 --- a/web/src/widget/text_input.rs +++ b/web/src/widget/text_input.rs @@ -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() } |