10个版本
0.2.0 | 2021年4月20日 |
---|---|
0.1.8 | 2021年3月30日 |
#4 in #simulated
37KB
863 行
无需浏览器的Rust DOM
此存储库已存档。由于我不再需要它,因此将此项目束之高阁。如果您需要在Rust中使用DOM,那么考虑您是否需要简单的DOM,或者是否需要类似JSDom的完整动态功能。如果是后者,我建议可能使用JSDOM + Deno。如果是前者,继续开发这个库可能值得。然而,我们遇到了一些复杂的情况,所以,我只是说可能会有困难。
旧介绍
你好,欢迎。此库提供服务器端或无浏览器DOM的模拟。
示例用法
use std::sync::Arc;
use rdom::config::ScreenMetrics;
use rdom::node::concrete::*;
use rdom::node::contents::{CommentNodeStorage, NodeType, TextNodeStorage};
use rdom::node::element::{ElementNodeStorage, HtmlButtonElementStorage, HtmlHtmlElementStorage};
use rdom::node::{AnyNodeArc, NodeBehavior};
use rdom::sandbox::Sandbox;
fn main() {
let metrics: ScreenMetrics = Default::default();
let sbox = Sandbox::new(metrics);
let doc = sbox.clone().window().document();
let document_element = sbox
.builder::<ElementNodeArc>()
.build_html();
// We don't use the text node, but those are available
let _text = doc.create_text_node("Hello, world!".to_string());
doc.append_child(document_element.into());
println!("Doc has {} child node(s)", doc.child_nodes().length());
// Prints out Doc has 1 child node(s)
}
这个库准备好了吗?
不,它仍然是一个预alpha版本的工作中。然而,它对合作持开放态度。
这个库和web-sys或Dodrio有什么区别?
Rdom尽可能模仿web-sys,因为它提供了一个看起来和表现都像DOM的DOM,就像Rust程序员通过与web-sys交互看到的DOM一样。
关键区别在于没有实际的浏览器。我的意思是,你可以有一个,但这不是必需的。
此外,此库支持多个沙盒的概念,因此并非所有节点都属于一个像web-sys那样的单个大节点池。相反,每个沙盒包含一个单独的文档树以及有关窗口的一些信息(如宽度和高度)。
与Dodrio相比,此库更加关注实际的DOM元素类型。Dodrio基本上对不同的标签类型是中立的,并且更多地关注如何操作DOM以匹配某些理想,例如React的虚拟DOM。如果这仍然不清楚,Dodrio以web-sys为目标(它是依赖项),理论上,这个库将来也可能成为Dodrio的后端。
并非所有的DOM都已实现。你是如何决定实现哪些部分的?
开发此库的原因是为了为Yew启用SSR支持。这是其唯一目的,因此虽然它构建得尽可能灵活,但我们目前主要满足的用例是这一点,尽管欢迎提交成为维护者的申请。
lib.rs
:
基于Rust的模拟DOM(web-sys的浏览器无关替代品)
依赖关系
~275–730KB
~17K SLoC