如何使用 wasm-bindgen 在 Rust 上正确执行 js 代码

如何解决如何使用 wasm-bindgen 在 Rust 上正确执行 js 代码

我正在使用 Rust、WASM 和 yew 作为前端框架。我正在围绕 materialize-css 构建一个包装器,以便在 yew 上使用它作为可重用组件的依赖项。

要使用一些 materialize-css 组件,需要对其进行初始化。例如,使用 sidenav

  document.addEventListener('DOMContentLoaded',function() {
    var elems = document.querySelectorAll('.sidenav');
    var instances = M.Sidenav.init(elems,options);
  });

问题是我试图按照 wasm-bindgen 文档中的描述使用 wasm-bindgen 运行它,但它不起作用。或者也许我真的不明白发生了什么。

根据文档,这应该有效:

#[wasm_bindgen( module = "/materialize/js/bin/materialize.js",js_namespace = ["M","Sidenav"] )]
extern "C" {
  fn init(el: JsValue,options: JsValue);
}

pub unsafe fn init_sidenav(el: &str,options: &str) {
    init(
        JsValue::from(document().get_element_by_id(el).expect("not found")),JsValue::from(options),);
}
//to use it on yew component
unsafe { materialize::sidenav::init_sidenav(self.props.el_id,&options) };

或者这个:

#[wasm_bindgen( module = "/materialize/js/bin/materialize.js",js_namespace = M )]
extern "C" {
  #[wasm_bindgen]
  type Sidenav;

  #[wasm_bindgen( static_method_of = Sidenav )]
  fn init(el: JsValue,options: &str) {
    Sidenav::init(
        JsValue::from(document().get_element_by_id(el).expect("not found")),&options) };

但它们都不起作用......在这两种情况下,代码编译都没有问题,但在浏览器中执行时,它会跳转错误

在第一种情况下,错误Uncaught SyntaxError: import not found: init lib.js:1:9

在第二种情况下,错误Uncaught SyntaxError: import not found: Sidenav lib.js:1:9

老实说,我不明白为什么会发生这种情况。我一直在寻找有关 WASM 的 MDN 文档和 wasm_bindgen 文档的信息,但我找不到任何对我有帮助的信息。

另外

我正在使用 --target 网络标志

我的项目结构

-
|Cargo.toml
|materialize/ (source of materialize-css dist)
|src/
|-components/ (wrappings of components on yew)
|-materialize/ (wasm-bindgen bindings of materialize)
|-lib.rs
|-...
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?