m , bvious , g raphical w eb a pplication i nterface
mogwai是用于创建GUI应用程序的视图库。它用Rust编写,并在您的浏览器中运行,并具有足够的功能服务器端来进行渲染。它是反应,骨干,灰烬,榆树,纯净等的替代方法。
mogwai背后的主要概念是
水槽和流而不是回调
查看诸如Click,MouseOver等的事件是通过流发送的,而不是调用回调。可以映射,过滤和折叠流。
小部件的视图很愚蠢
视图只是从流中接收消息后突变UI树的结构。视图是使用普通的Rust功能或RSX宏来构造和嵌套的。
窗口小部件逻辑是一个或多个异步任务,可以循环通过事件消息
小部件使用从视图接收事件的异步任务循环,并向视图发送更新。
这是一个按钮的示例,该按钮计算单击它的次数:
use mogwai_dom :: prelude :: * ;
# [ derive ( Default ) ]
struct Button {
clicks : usize ,
click : Output < ( ) > ,
text : Input < String > ,
}
impl Button {
/// Convert into a `ViewBuilder`
fn builder ( mut self ) -> ViewBuilder {
rsx ! (
button ( on : click= self . click . sink ( ) . contra_map ( |_ : JsDomEvent | ( ) ) ) {
// Using braces we can embed rust values in our UI tree.
// Here we're creating a text node that starts with the
// string "Clicked 0 times" which updates every time a
// message is received on the stream.
{ ( "Clicked 0 times" , self . text . stream ( ) . unwrap ( ) ) }
}
) . with_task ( async move {
while let Some ( ( ) ) = self . click . get ( ) . await {
self . clicks += 1 ;
self . text . set ( if self . clicks == 1 {
"Clicked 1 time" . to_string ( )
} else {
format ! ( "Clicked {} times" , self . clicks )
} ) . await . unwrap ( ) ;
}
} )
}
}
let btn = Button :: default ( ) ;
// Get a sink to manually send events.
let mut click_sink = btn . click . sink ( ) ;
// Build the view to render in the browser
let view = Dom :: try_from ( btn . builder ( ) ) . unwrap ( ) ;
// Attach it to the browser's DOM tree
view . run ( ) . unwrap ( ) ;
// Spawn asyncronous updates
wasm_bindgen_futures :: spawn_local ( async move {
// Queue some messages for the view as if the button had been clicked:
click_sink . send ( ( ) ) . await . unwrap ( ) ;
click_sink . send ( ( ) ) . await . unwrap ( ) ;
// view's html is now "<button>Clicked 2 times</button>"
} ) ; 如果您有兴趣了解更多信息 - 请阅读介绍和文档。
ViewBuilder允许在多个平台(Web,iOS,Android,Desktop等)上运行mogwai使用流,水槽,声明视图构建器和异步逻辑来定义组件以及它们如何随时间变化。
视图突变是显式的,并且是由于接收消息的视图而发生的,因此vdom扩散没有性能开销。
如果您喜欢具有大量地图和折叠的功能性编程风格 - 或者您想去vroom!那也许mogwai适合您:)
请记住, mogwai仍在Alpha中,API正在积极改变 - PR,问题和问题受到欢迎。截至0.6发行版,我们期望API相对向后兼容。
mogwai是一个生锈的第一库。不需要您有npm或node 。在不编写任何JavaScript的情况下启动和运行您的项目就足够容易了。
mogwai很活泼!这是一些非常手动和粗略的todomvc指标:

首先,您需要Rust Toolchain的新版本。为此,您可以访问https://rustup.rs/并遵循安装说明。
然后,您需要WASM-PACK。
为了启动一个新的Mogwai项目,我们将使用出色的cargo-generate ,可以使用cargo install cargo-generate 。
然后运行
cargo generate --git https://github.com/schell/mogwai-template.git并给命令行一个项目名称。然后cd进入您闪闪发光的新项目,
wasm-pack build --target web然后,如果您还没有它, cargo install basic-http-server或使用您喜欢的替代方案为您的应用提供服务:
basic-http-server -a 127.0.0.1:8888快乐黑客! ☕☕
?使用Mogwai烹饪是针对各种UI问题的一系列示例解决方案。它的目的是成为一个很好的参考文档,但不是分步教程。
在支持频道中闲逛并谈论mogwai :
示例可以在示例文件夹中找到。
构建示例使用:
wasm-pack build --target web examples/{the example}其他外部示例包括:
请考虑赞助此图书馆的开发!