【发布时间】:2022-12-12 14:33:38
【问题描述】:
我正在使用 Kendo ScrollView 在表单上显示人物图像。
与 ScrollView 分开,用户可以更改图像的显示顺序。在他们保存对显示顺序的更改后,重新加载 ScrollView,滚动到第一项,然后应该以新顺序显示图像。
但是,我注意到当 ScrollView 当前位于第一页时,该页面不会刷新/重绘。
我的 ScrollView 看起来像这样:
@(Html.Kendo().ScrollView()
.Name("personImage")
.TemplateId("personImageTemplate")
.DataSource(d => d
.Custom()
.Type("aspnetmvc-ajax")
.Transport(t => t
.Read(r => r.Action("PersonImages_Read", "Person", new { personID = Model.ID } ))
)
.Schema(s => s.Data("Data").Total("Total"))
.ServerPaging(false)
.PageSize(1)
)
)
该模板如下所示:
<script type="text/x-kendo-tmpl" id="personImageTemplate">
<img class="personImage"
src="@(Url.Action("ImageRender", "Person"))?imageID=#= data.ID #"
title="#= data.Filename #" />
</script>
这是我的刷新功能:
function refreshPersonImageScrollView() {
var scrollView = $("#personImage").data("kendoScrollView");
if (scrollView) {
scrollView.dataSource.read();
// https://docs.telerik.com/kendo-ui/api/javascript/ui/scrollview/methods/refresh
// redraws, doesn't re-read from datasource
scrollView.refresh();
// scroll to first image
scrollView.scrollTo(0);
}
}
当我看到调用此函数时发出的请求时,我看到了:
A.当一个页面以外第一页被选中:
-
PersonImages_Read(ScrollView 的dataSource读取) - ScrollView 滚动到第一张图片
- 3x
ImageRender,因为它呈现 ScrollView 中的前 3 个项目B、选中第一页时:
-
PersonImages_Read(ScrollView 的dataSource读取) - 没有别的
我尝试调换
scrollView.refresh()和scrollView.scrollTo(0)的顺序,但结果没有改变。有没有办法让剑道刷新/重绘当前页面?根据文档,我认为
refresh会这样做,但事实并非如此。编辑
我已经能够在REPL 中复制这个问题。要查看实际行为:
- 注意第一张图片下的“渲染”时间。
- 滚动到 ScrollView 中的第二张图像。
- 等待几秒钟,然后单击“刷新”按钮。
ScrollView 应该滚动回到第一张图片。 - 观察第一张图片下的“渲染”时间与“刷新”按钮下方报告的“上次单击”时间相匹配,不再是步骤 #1 中的时间。 (这是正确的行为。)
- 在第一张图片上停留几秒钟。在继续之前请注意列出的“渲染”时间。
- 单击“刷新”按钮。
- 请注意,“上次单击”时间已更新,并且在“日志”部分中,有一个条目显示“dataSource read complete”大约在同时。但是,图像下的“渲染”时间没有改变,也没有日志条目显示“已加载产品 #X 的图像”。
-
【问题讨论】:
-
如果您使用 Telerik 刷新链接中的代码来设置 scrollView 变量,则 scrollView.refresh() 调用会发生什么情况——有什么区别吗?他们的示例明确启用了寻呼机 - var scrollView = $("#scrollView").kendoScrollView({ enablePager: true}).data().kendoScrollView;
-
我不确定你的意思。这部分:
$("#personImage").kendoScrollView({ enablePager: true })让它尝试重新初始化现有的滚动视图,并且确实弄乱了显示。即使这样,刷新也不会重新呈现当前页面。将.EnablePager(true)添加到 razor 中的定义也不能解决问题。 -
你认为你可以在 Telerik 网站上的 REPL 中复制这个问题吗?netcorerepl.telerik.com/cGlQEVcF05uVCSU225
-
@G_P 我能够复制该行为,并编辑了我的问题以包含指向它的链接。
标签: kendo-ui