javascript - 如何在 Blazor 中删除和排序动态创建的 RenderFragments
问题描述
我无法在 Blazor 中正确删除或排序动态创建的组件。
我在页面正文中按如下方式创建对象:
private RenderFragment CreateComponentObject() => builder =>
{
foreach (var item in myObjects)
{
builder.OpenComponent(i, typeof(MyBlazorComponent));
builder.AddAttribute(1, "ComponentID", item.ID);
builder.AddAttribute(1, "ComponentName", item.Name);
builder.AddComponentReferenceCapture(i, inst => { ReferenceObjects.Add((MyBlazorComponent)inst); });
builder.CloseComponent();
}
i++;
};
现在我需要两个都能够
1. Sort the components by ID or Name
2. Eventually remove one or more components
我试图通过一个简单的排序脚本对项目进行排序,但它不起作用。或者,我尝试通过 builder.Clean “删除”所有组件并重新输入 CreateComponentObject 函数,以所需的方式订购要创建的组件。但是这种策略效果不佳,因为某些参数的顺序会发生变化,而其他参数则不会。
示例:如果我清除构建器并按名称重新分配组件,我将看到组件的 ID 遵循正确的顺序,但名称不会改变
Before:
ID 19 Name Kiki
ID 20 Name Jiji
After:
ID 20 Name Kiki
ID 19 Name Jiji
有谁知道如何面对我的两个问题?
解决方案
编号应该遵循行号,而不是循环。
builder.OpenComponent(1, typeof(MyBlazorComponent));
builder.AddAttribute(2, "ComponentID", item.ID);
builder.AddAttribute(3, "ComponentName", item.Name);
builder.AddComponentReferenceCapture(4, inst => { ReferenceObjects.Add((MyBlazorComponent)inst); });
builder.SetKey(item); // makes the sequence nrs less relevant
builder.CloseComponent();
// i++;
但是您可能想使用 SetKey 来覆盖编号。
推荐阅读
- javascript - 布局的安排就像颤抖,直到将新城镇的结果/天气预报加载到 React 中
- elasticsearch - 控制elasticsearch高亮结果中的窗口大小
- model-view-controller - .Net MVC 应用程序架构上的设计输入
- asp.net-core-2.0 - ASP.NET Core Identity 2.0:为特定用户添加自定义标志并由其他用户访问
- typo3 - 使用 noCacheHash=true 参数生成操作链接未按预期工作
- ruby-on-rails - Rails 茧嵌套字段,在编辑表单上呈现每个字段旁边的现有图像
- arm - 如何在手臂上使用节俭
- java - MediaRecorder.stop() 失败:重新启动后 -1007
- latitude-longitude - 从列表视图中的给定坐标列表显示当前位置 1 公里内的最近距离
- javascript - 在 JavaScript 中确定 1.0 为 float