2

我们一直在使用以下技术实施网站。

客户端: Html5、KendoUI、WebSync(发布、订阅者)

服务器: ASP.net MVC 3.0

Grid 对每一行都有特定的操作。例如,我们需要在选中特定行的复选框后通过单击操作菜单来更新每一行的状态。

当我们在菜单上执行此操作时,我们向 MVC 控制器发送 ajax 请求以更新数据库中的记录,它会简单地返回 true 给客户端。这里,我们使用 WebSync发布者 - 订阅者模型在此请求完成时实际通知客户端,因为这些操作需要一些时间来处理。

当我们从Web Sync获得回调时,我们更新 kendo 数据网格如下。

onMoveActionMessageReceived = function (data) {

     $("#resultGrid").data("kendoGrid").dataSource.read();
     WebSyncClient.UnsubscribeToMoveTransactionActions($('#moveTransactionIdTxt').val());
 }

由于我们在网格数据的数据库中有超过 40 万条记录,并且我们使用分页,因此该解决方案是一个耗时的解决方案,并且会影响用户体验。

无论如何用给定的数据项(即不是总数据源)刷新剑道数据源。(网格范围更新)?或者还有其他解决方案吗?

4

1 回答 1

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);
    });
};
于 2012-10-03T06:24:21.393 回答