a virtual view transaction renderer for the dom
bash
$ cargo build --example counter --target asmjs-unknown-emscripten
$ cargo build --example simple --target asmjs-unknown-emscripten
```rust
extern crate stdweb;
extern crate serde_json;
extern crate virtualview; extern crate virtualview_dom;
use std::sync::{Arc, Mutex}; use std::sync::atomic::{AtomicIsize, Ordering};
use stdweb::web::document;
use virtualview::{EventManager, Event, View, Renderer}; use virtualview_dom::Patcher;
static COUNT: AtomicIsize = AtomicIsize::new(0isize);
static mut PATCHER: Option
fn onaddcount(: &mut Event) { println!("ADD"); COUNT.fetchadd(1, Ordering::Relaxed); onrender(); } fn onsubcount(: &mut Event) { println!("SUB"); COUNT.fetchsub(1, Ordering::Relaxed); onrender(); }
fn render(count: isize) -> View {
virtualview! {
fn onrender() { let patcher = unsafe { PATCHER.asmut().unwrap() }; let renderer = unsafe { RENDERER.asmut().unwrap() }; let eventmanager = unsafe { EVENTMANAGER.asref().unwrap() }; let count = COUNT.load(Ordering::Relaxed); let view = render(count); let transaction = renderer.render(view, &mut *eventmanager.lock().unwrap()); patcher.patch(&transaction, eventmanager.clone()); }
fn main() { stdweb::initialize();
let patcher = Patcher::new(document().get_element_by_id("app").unwrap().into(), document());
let renderer = Renderer::new();
let event_manager = Arc::new(Mutex::new(EventManager::new()));
unsafe {
PATCHER = Some(patcher);
RENDERER = Some(renderer);
EVENT_MANAGER = Some(event_manager);
}
on_render();
stdweb::event_loop();
} ```