我正在使用Javascript interop为我最喜欢的一些Javascript插件编写blazor组件包装器。
我的父组件具有以下功能:
async Task<IEnumerable<DpEvent>> GetEvents(DateRange dateRange)
{
return await EventManager.GetEvents().Where(e => e.StartDate >= dateRange.StartDate).Where(e => e.EndDate <= dateRange.EndDate).ToListAsync();
}
我的子组件有这个参数:
[Parameter] public Func<DateRange, Task<IEnumerable<DpEvent>>> GetEvents { get; set; }
我必须做什么才能将GetEvents方法传递给我的子组件,如下所示:
<ChildComponent GetEvents="GetEvents"></ChildComponent>
我能够通过为回调创建一个自定义委托来解决这个问题。
我想传递给子组件的函数:
async Task<IEnumerable<DpEvent>> GetEvents(DateRange dateRange)
{
return await EventManager.GetEvents().Where(e => e.StartDate >= dateRange.StartDate).Where(e => e.EndDate <= dateRange.EndDate).ToListAsync();
}
我的代表的定义和声明:
public delegate Task<IEnumerable<DpEvent>> GetEventsDelegate(DateRange dateRange);
public GetEventsDelegate GetEventsCallBack;
将我的代表分配到我的职能:
protected override async Task OnInitializedAsync()
{
GetEventsCallBack = GetEvents;
}
将我的代理传递给我的子组件:
<ChildComponent GetEvents="GetEventsCallBack"></ChildComponent>
我的子组件上的参数:
[Parameter] public Func<DateRange, Task<IEnumerable<DpEvent>>> GetEvents { get; set; }
最后,我的子组件可以使用委托:
IEnumerable<DpEvent> dpEvents = await GetEvents.Invoke(dateRange);