我在blazor服务器端应用程序中使用BlazoredTypeahead组件,我想知道@context关键字的来源。
以下代码可以正常运行,但是VS报告无法解析符号“上下文”。自然,我很好奇它为什么起作用以及上下文来自何处。
@inject IEquipmentService EquipmentService
@inject AppDataService AppDataService
<h3>ModelSelect</h3>
<BlazoredTypeahead SearchMethod="SearchModels"
@bind-Value="equipModel">
<SelectedTemplate>
@context.model
</SelectedTemplate>
<ResultTemplate>
@context.model (@context.model_desc)
</ResultTemplate>
</BlazoredTypeahead>
@if (equipModel != null)
{
<p>Selected model is: @equipModel.model</p>
}
@code {
private EquipModel equipModel;
private async Task<IEnumerable<EquipModel>> SearchModels(string searchText)
{
var result = await EquipmentService.SearchModels(AppDataService.CurrentContact, searchText);
return await Task.FromResult(result.ToList());
}
}
答案 0 :(得分:1)
您在使用Resharper吗?如果是这样,那很可能就是原因-Resharper的Blazor支持目前仍在进行中(尽管肯定在改善)。
有一个与---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-313-39c697b1f1c5> in <module>
----> 1 ax = sns.barplot(x = 'Sex', y = 'Survived', data = train)
c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\categorical.py in barplot(x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge, ax, **kwargs)
3148 estimator, ci, n_boot, units, seed,
3149 orient, color, palette, saturation,
-> 3150 errcolor, errwidth, capsize, dodge)
3151
3152 if ax is None:
c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\categorical.py in __init__(self, x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge)
1615 order, hue_order, units)
1616 self.establish_colors(color, palette, saturation)
-> 1617 self.estimate_statistic(estimator, ci, n_boot, seed)
1618
1619 self.dodge = dodge
c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\categorical.py in estimate_statistic(self, estimator, ci, n_boot, seed)
1517 n_boot=n_boot,
1518 units=unit_data,
-> 1519 seed=seed)
1520 confint.append(utils.ci(boots, ci))
1521
c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\algorithms.py in bootstrap(*args, **kwargs)
83 for i in range(int(n_boot)):
84 resampler = integers(0, n, n)
---> 85 sample = [a.take(resampler, axis=0) for a in args]
86 boot_dist.append(f(*sample, **func_kwargs))
87 return np.array(boot_dist)
c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\algorithms.py in <listcomp>(.0)
83 for i in range(int(n_boot)):
84 resampler = integers(0, n, n)
---> 85 sample = [a.take(resampler, axis=0) for a in args]
86 boot_dist.append(f(*sample, **func_kwargs))
87 return np.array(boot_dist)
TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'
问题有关的特定支持案例,标题为'Blazor template context parameters are marked as unresolved symbols'。
我在下面的那篇文章的评论中提到了一个“丑陋的解决方法”,但是我建议您不要这样做,而是等待JetBrains解决根本问题:
import curses
from curses import KEY_RIGHT, KEY_LEFT, KEY_UP, KEY_DOWN
from random import randint
curses.initscr()
win = curses.newwin(20, 60, 0, 0)
win.keypad(1)
curses.noecho()
curses.curs_set(0)
win.border(0)
win.nodelay(1)
有关Blazor在Resharper中的总体进度,请检查'Blazor support'。
答案 1 :(得分:-1)
在组件中定义RenderFragment属性时,实际上定义了一个委托,该委托封装了一个具有T类型单个参数的方法,例如:
RenderFragment<TItem> RowTemplate
当您像这样执行委托时:
@foreach (var item in Items)
{
<tr>@RowTemplate(item)</tr>
}
您要为项目列表中的每个项目调用委托,为委托传递一个项目对象,例如Pet对象(请注意,委托的类型说明符在这里是通用的。 @context 是Blazor提供的内部变量,其中包含传递给委托的值,例如:
<RowTemplate>
<td>@context.ID</td>
<td>@context.Name</td>
</RowTemplate>
注意:RowTemplate元素的开头和结尾中的内容表示由RowTemplate RenderFragment委托生成的内容的片段...再次在生成内容时,将值传递给委托并使用它。例如,如果值是一个Pet对象,具有两个字段,则可以使用@ context.Name之类的表达式来访问字段的值。
请注意,有一种方法可以使用传递的对象的类型名称来代替@context,但这是另一回事了。
但是VS报告它无法解析符号'context'
这是警告,对吗?我没有检查您的代码,但是在我看来,使用的类型说明符是泛型类型,而VS无法解析基础类型。在我的示例中,类型说明符为TItem,但传递给RenderFragment<TItem> RowTemplate
属性的项目列表的类型为Pet。
据我所记得,以前泛型类型存在问题,您必须将传递给基础组件的基础类型传递给模板组件...您必须这样编写代码:
模板化组件的用法:
如您所见,我们将一个名为“ pets”的Pet对象列表分配给Items属性,但是我们还必须指定在列表中传递的对象的类型(TItem =“ Pet”)。据我所知,这个问题已经解决了,也许BlazoredTypeahead的代码是写在前面的?