我正在使用wasm bindgen,我有以下功能:
#[wasm_bindgen]
pub fn obj(o: &JsValue){
console::log_1(o);
}
在js中,我将这个函数称为obj({name: "john"});
它工作正常,但是当我尝试console::log_1(o.name);
它unknown field
指向name
时给出错误
JsValue
没有字段name
。要获取此字段,您必须声明 JS 对象。
变式 1
将 serde 添加到依赖项:
serde = "^1.0.101"
serde_derive = "^1.0.101"
锈代码:
extern crate serde;
#[derive(Serialize, Deserialize)]
pub struct User {
pub name: String,
}
#[wasm_bindgen]
pub fn obj(o: &JsValue){
let user: User = o.into_serde().unwrap();
console::log_1(user.name);
}
变式2
另一种方法是直接使用 wasm-bindgen,但我从未使用过它。我认为它应该像这样工作:
#[wasm_bindgen]
pub struct User {
pub name: String,
}
#[wasm_bindgen]
pub fn obj(o: User){
console::log_1(o.name);
}
还有第三个变体:使用js_sys::Reflect::get
。
在您的情况下,它看起来像这样:
let value = js_sys::Reflect::get(o, &"name".into())?;
console::log_1(value);
请查看访问非类型化 JavaScript 值属性的wasm_bindgen文档。