对于类型为{{1}的e_text
和类型为web_sys::HtmlDivElement
的{{1}},此函数可为on_click回调建立一个闭包。编译并运行正常。
e_button
下一步是概括web_sys::HtmlButtonElement
并将其移至let a = buildCbClosure(web_sys::HtmlElement::from(e_text));
fn buildCbClosure(mut e : web_sys::HtmlElement) -> Closure<dyn FnMut(web_sys::MouseEvent)> {
let a = Closure::wrap(Box::new(move |event: web_sys::MouseEvent| {
handleButtonClick(&event);
e.set_text_content(Some("Text - Klik"));
}) as Box<dyn FnMut(_)>);
a
}
e_button.set_onclick(Some(a.as_ref().unchecked_ref()));
函数中,但是尚未在web_sys::HtmlElement::from
上找到捕获此特征的特征。尝试了以下类似操作,这显然是错误方向上的buildCbClosure
特性。另一个方向就像是e
的不同子类型的一般向上转换:
From
礼物:
web_sys::HtmlElement
答案 0 :(得分:1)
From
性状的倒数是Into
。如果O
存在From<O>
实现,则Into<T>
将自动为类型T
实现。
fn buildCbClosure(e : impl Into<web_sys::HtmlElement>) -> Closure<dyn FnMut(web_sys::MouseEvent)> {
let mut e = e.into(); // `e` is an HtmlElement.
}
现在,可以传递给t
的任何HtmlElement::from(t)
都可以直接传递给buildCbClosure(t)
。