【发布时间】:2020-08-11 00:56:24
【问题描述】:
我想在模板内的组件与其父组件之间使用双向数据绑定。数据绑定运行良好的一种方式。但是当我修改从 RenderFragment 传递的上下文时,这个修改不会传播到模板(容器)。这是示例。
这是模板定义。我们有一个表单,我们希望能够在模型的函数中指定表单的内容。
@typeparam TItem
@typeparam TItemDtoCU
@typeparam TDataService
<EditForm Model="@Item" OnValidSubmit="HandleValidSubmit" class="item-editor">
<DataAnnotationsValidator />
@FormContentTemplate(Item)
<span class="save">
<MatButton Type="submit" Raised="true">Save</MatButton>
<MatButton Type="reset" Raised="true" OnClick="HandleCancelSubmit">Cancel</MatButton>
</span>
</EditForm>
这里是我使用这个模板的地方
<ModelEditorTemplate TItem="ClassName"
TItemDtoCU="OtherClassName"
TDataService="ServiceClassName"
ItemId="SelectedItem?.Id"
OnItemAdded="ItemAdded"
OnItemUpdated="ItemUpdated">
<FormContentTemplate>
<span>
<MatTextField Label="Name" @bind-Value="context.Name" @bind-Value:event="onchange" />
<ValidationMessage For="@(() => context.Name)" />
</span>
</FormContentTemplate>
</ModelEditorTemplate>
当用户修改时,MatTextField字段被重置为模板组件提供的初始值。
你有什么想法吗?
编辑 1:关于我们获取数据方式的更多信息
是的,TDataService 正在从 REST Api 获取组件。这里链接到模板的部分类:
public partial class ModelEditorTemplate<TItem, TItemDtoCU, TDataService> : ParentThatInheritsFromComponentBase
where TItem : BaseEntity, new()
where TDataService : ICrudService<TItem, TItemDtoCU>
{
public TItem Item = new TItem();
[Inject]
protected TDataService DataService { get; set; }
protected override async Task OnParametersSetAsync()
{
//...
await LoadItem();
// ...
}
protected async Task LoadItem()
{
//...
Item = await DataService.Get(ItemId.Value);
// ....
}
}
【问题讨论】:
-
如果你删除
@bind-Value:event="onchange"有帮助吗? -
不,一开始它不存在。我试图添加它来解决问题^^
-
ModelEditorTemplate 如何检索数据?与提供的 TDataService 有关吗?您能告诉我们 MET 组件是如何查询该服务的吗?
-
更多信息在帖子里,够吗?
-
我想我也有同样的问题.. stackoverflow.com/questions/61142096/… 。已经悬赏,但没有结果。