【发布时间】:2021-02-09 02:51:56
【问题描述】:
我正在尝试制作一个 Blazor 组件,然后我将专门化并覆盖一些方法。
基础组件“ZoomList”:
@inherits ComponentBase
<div>
<table class="table">
<thead>
<tr>
@foreach (var str in Headers())
{
<th>@str</th>
}
</tr>
</thead>
<tbody>
@foreach (var item in items)
{
<tr>
@foreach (var str in Rows(item))
{
<td>@str</td>
}
</tr>
}
</tbody>
</table>
</div>
@code {
[Parameter]
public List<Object> items { get; set; }
protected virtual List<string> Rows(Object item) { return new List<string>() { "Placeholder" }; }
protected virtual List<string> Headers() { return new List<string>() { "Placeholder" }; }
}
派生组件“ZoomCampaign”:
@inherits ZoomList
@using MyNamespace.Model
@{
this.BuildRenderTree(__builder);
}
@code {
protected override List<string> Rows(Object item)
{
Campaign camp = item as Campaign;
return new List<string>() {
camp.Id.ToString(),
camp.Nom
};
}
protected override List<string> Headers()
{
return new List<string>() { "#", "Name" };
}
}
然后从另一个页面调用 ZoomCampaign。 但是 this.BuildRenderTree(__builder) 不使用被覆盖的方法,而是使用基本方法。 => 我的 html 数组包含“占位符”文本,而不是 ZoomCampaign 的覆盖方法“行”和“标题”中定义的文本。
我错过了什么?如何更改它,以便在渲染期间使用覆盖方法?
【问题讨论】:
标签: inheritance razor blazor