简体   繁体   中英

Blazor - stopPropagation on event for dynamically created DOM with RenderTreeBuilder

I have a component class that generates DOM dynamically. I need to be able to stopPropagation on events like onclick, onmouseup etc.

protected override void BuildRenderTree(RenderTreeBuilder builder)
{
        int i = 0;
        base.BuildRenderTree(builder);
        builder.OpenElement(i++, Tag);
        builder.AddAttribute(i++, "class", Class);
}

I tried to add another attribute and event handler like this, but I'm not sure how to access event variable in the handler:

builder.AddAttribute(i++, "onclick", EventCallback.Factory.Create<MouseEventArgs>(this, OnClick));

private void OnClick()
{
   //e.StopPropagation() how do I get event here?      
}

The WebRenderTreeBuilderExtensions class provides extension methods for managing event behavior.

In your case, you can stop the propagation by using the AddEventStopPropagationAttribute extension method:

protected override void BuildRenderTree(RenderTreeBuilder builder)
{
    int i = 0;
    base.BuildRenderTree(builder);
    builder.OpenElement(i++, Tag);
    builder.AddAttribute(i++, "class", Class);
    builder.AddAttribute(i++, "onclick", EventCallback.Factory.Create<MouseEventArgs>(this, OnClick));
    builder.AddEventStopPropagationAttribute(i++, "onclick", true);
}

private void OnClick()
{
    // Handle your event   
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM