范围刷新 + 部分刷新 + Kendo 数据源 + Kendo Grid + WebSync
Posted
技术标签:
【中文标题】范围刷新 + 部分刷新 + Kendo 数据源 + Kendo Grid + WebSync【英文标题】:Range Refresh + Partially refreshing + Kendo Datasource + Kendo Grid + WebSync 【发布时间】:2012-09-19 00:23:39 【问题描述】:我们一直在使用以下技术实施网站。
客户端: html5、KendoUI、WebSync(发布、订阅者)
服务器: ASP.net MVC 3.0
Grid 对每一行都有特定的操作。例如,我们需要在选中特定行的复选框后通过单击操作菜单来更新每一行的状态。
当我们在菜单上做这个操作时,我们向MVC控制器发送ajax请求来更新数据库中的记录,它会简单地返回true给客户端。这里,我们使用了WebSync publisher-subscriber模型在此请求完成时实际通知客户端,因为这些操作需要一些时间来处理。
当我们从 Web Sync 获得回调时,我们更新 kendo 数据网格如下。
onMoveActionMessageReceived = function (data)
$("#resultGrid").data("kendoGrid").dataSource.read();
WebSyncClient.UnsubscribeToMoveTransactionActions($('#moveTransactionIdTxt').val());
由于我们在网格数据的数据库中有超过 40 万条记录,并且我们使用分页,因此该解决方案是一个耗时的解决方案,并且会影响用户体验。
无论如何用给定的数据项(即不是总数据源)刷新剑道数据源。(网格范围更新)? 或者还有其他解决方案吗?
【问题讨论】:
【参考方案1】:我在 Kendo + WebSync 中找到了范围更新的解决方案。在服务器端完成该过程后,webSync 通知负责更新客户端数据源的refreshSearchData 函数。 getSearchResultViewItem 函数从数据库返回数据项,我已经从客户端更新了数据源。
refreshSearchData = function (entityId, entityType)
getSearchResultViewItem(entityId, entityType, function (data)
var kendoGrid = $("#resultGrid").data("kendoGrid");
if (kendoGrid)
if ($('#SelectedTypeId')[0].value == entityType)
var items = kendoGrid.dataSource.data().toJSON();
for (var i = 0; i < items.length; i++)
if (items[i].Id == data.Id)
items[i] = data;
break;
kendoGrid.dataSource.data(items);
);
;
getSearchResultViewItem = function (entityId, entityType, callback)
$.get(baseUrl + 'Search/GetSearchViewDtoById', id: entityId, searchTypeId: entityId , function (data)
callback(data);
);
;
【讨论】:
但是,我不得不在数据源中手动重置分页、区域值,因为剑道重新初始化数据源。同时,我使用数据绑定事件来绑定这些初始值。这是完美的工作;)以上是关于范围刷新 + 部分刷新 + Kendo 数据源 + Kendo Grid + WebSync的主要内容,如果未能解决你的问题,请参考以下文章