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 '')
| -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()      } | 
