Вызов getBBox для текстового элемента SVG в приложении Seed Rust

Я только что сделал свои первые шаги с WASM и Seed, что до сих пор было очень гладким опытом. Мне удалось создать SVG, используя svg!, circle!, text!,... и аналогичные макросы. Чтобы правильно сгенерировать SVG, мне нужно измерить текст. Моя идея состоит в том, чтобы сгенерировать текстовые узлы SVG и вызвать getBBox на узле. Я понял, что Seed использует web_sys и там реализован getBBox.

Моя проблема в том, как выйти из Node создан text!в SvgTextElement. Я пытался получить доступ к node_wsполе, но оно кажется "пустым". Возможно, он еще не был создан, но мне сейчас мало о внутреннем устройстве Seed.

Итак, как мне создать текстовый узел SVG, чтобы я мог вызвать на нем getBBox перед генерацией "основных" узлов SVG?

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();
            // ...
        }
        // ...
    }
}
Другие вопросы по тегам