问题描述
我不知道如何在此处表达好标题。
我基本上是在尝试使用开闭原理,因此不需要精确指定要呈现的组件,而只需使用interface / abstract类即可。
我正在制作一个节点编辑器。 我有一个NodeModelBases列表,以保存每个节点的数据,对于每个节点,我想插入一个要渲染的相应NodeComponent。当前:
<div class="diagram-html-layer">
@foreach (NodeModelBase node in nodeModelManager.Nodes) {
<NodeBase NodeModel="@node" OnDeleteEvent="OnDeleteNode"/>
}
</div>
这个想法是NodeModelBase是由特定类型的Node继承的,所以我可以有一个“ StartNode:NodeModelBase”,“ DelayNode:NodeModelBase”等,即NodeModelBase的子类。我可能有20个或更多子类,并且我不想为每个新添加的节点类型更新上述for循环。
然后我想渲染它们各自的组件。当前,我有一个名为NodeBase的Blazor组件,我刚刚插入了它,因为到目前为止我只有一种节点类型。但我希望能够做类似的事情: node.GetHTML() 然后插入它。
我可能需要很长的if-else来检查我拥有NodeModelBase的哪个子类,然后插入正确的组件,例如:
if(node is StartNode) {
<StartNode/>
} else if (node is DelayNode) {
<DelayNode/>
} else ...
但这很不方便。
我知道可以使用RenderTreeBuilder以编程方式完成此操作,并进行诸如builder.OpenElement(...)或builder.AddAttribute(...)之类的调用,因此结果将类似于:
<div class="diagram-html-layer">
@foreach (NodeModelBase node in nodeModelManager.Nodes) {
@node.GetRenderFragment();
}
</div>
但是作为html / blazor的新手,我更希望能够正常定义html / razor语法,并以某种方式返回/插入它。
那么,关于如何灵活插入哪个组件的任何建议?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)