1

我刚刚使用 WASM 和Seed迈出了第一步,到目前为止这是一次非常顺利的体验。我能够使用svg!, circle!, text!, ... 和类似的宏创建 SVG。为了以正确的方式生成我的 SVG,我必须测量文本。我的想法是生成 SVG 文本节点并在节点上调用getBBox。我发现 Seed 正在使用web_sys并且getBBox 在那里实现

我的问题是如何从Nodecreated bytext!SvgTextElement。我试图访问该node_ws字段,但它似乎是“空的”。它可能尚未创建,但我现在对 Seed 内部结构还不够了解。

那么如何创建一个 SVG 文本节点,以便在生成“主”SVG 节点之前对其调用 getBBox 呢?

4

1 回答 1

1

您可以使用el_ref来获取对 DOM 元素的引用。像这样的东西应该可以工作:

struct Model {
    element: ElRef<web_sys::SvgTextElement>,
}

fn view(model: &Model) -> Node<Msg> {
    svg!![
        text![
            el_ref(&model.element),
            // ...
        ],
        // ...
    ]
}

fn init(orders: &mut impl Orders<Msg>) -> Model {
    orders.after_next_render(|_| Msg::Rendered);
    // ...
}

fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
    match msg {
        Msg::Rendered => {
            let element = model.element.get().expect("no svg text element");
            let b_box = element.get_b_box();
            // ...
        }
        // ...
    }
}
于 2021-03-31T11:38:06.213 回答