bug: Fix some bugs in the init wiring

This commit is contained in:
Jeremy Wall 2023-11-13 18:28:11 -05:00
parent 76baa1871e
commit f41a9d3100
2 changed files with 14 additions and 10 deletions

View File

@ -142,11 +142,10 @@ fn expand_wc_struct_trait_shim(
"class {name} extends HTMLElement {{ "class {name} extends HTMLElement {{
constructor() {{ constructor() {{
super(); super();
var self = this; this._impl = impl();
self._impl = impl(); this._impl.init_impl(this);
self._impl.init(); for (const t of this.observedEvents()) {{
for (const t of self.getObservedEvents()) {{ this.addEventListener(t, function(evt) {{ this.handleComponentEvent(evt); }} );
self.addEventListener(t, function(evt) {{ self.handleComponentEvent(evt); }} );
}} }}
}} }}
@ -217,6 +216,12 @@ fn expand_wasm_shim(struct_name: &Ident) -> syn::ItemImpl {
Self::default() Self::default()
} }
#[wasm_bindgen::prelude::wasm_bindgen]
pub fn init_impl(&self, element: &web_sys::HtmlElement) {
use #trait_path;
self.init(element);
}
#[wasm_bindgen::prelude::wasm_bindgen] #[wasm_bindgen::prelude::wasm_bindgen]
pub fn connected_impl(&self, element: &web_sys::HtmlElement) { pub fn connected_impl(&self, element: &web_sys::HtmlElement) {
use #trait_path; use #trait_path;

View File

@ -123,15 +123,15 @@ pub trait WebComponentDef: IntoWasmAbi + Default {
} }
fn create() -> Element { fn create() -> Element {
Self::create_in_window(window().unwrap()) Self::create_in_window(window().expect("Failed to get window"))
} }
fn create_in_window(window: Window) -> Element { fn create_in_window(window: Window) -> Element {
window window
.document() .document()
.unwrap() .expect("Failed to get document")
.create_element(Self::element_name()) .create_element(Self::element_name())
.unwrap() .expect("Failed to create element")
} }
fn element_name() -> &'static str; fn element_name() -> &'static str;
@ -304,7 +304,7 @@ mod tests {
#[web_component( #[web_component(
class_name = "MyElement", class_name = "MyElement",
element_name = "my-element", element_name = "my-element",
observed_attrs = "['class']" observed_attrs = "['class']",
)] )]
pub struct MyElementImpl {} pub struct MyElementImpl {}
@ -383,7 +383,6 @@ mod tests {
"Added a text node on adopt" "Added a text node on adopt"
); );
} }
// Then we can have the new document adopt this node.
} }
#[wasm_bindgen_test] #[wasm_bindgen_test]