2012-09-27 130 views
2

我們一直在使用以下技術實施網站。範圍刷新+部分刷新+ Kendo Datasource + Kendo Grid + WebSync

客戶: HTML5,KendoUI,WebSync(發佈,訂閱服務器)

服務器: ASP.net MVC 3.0

電網對各行的具體操作。例如,我們需要在選中特定行中的複選框後單擊操作菜單來更新每行的狀態。

當我們這樣做菜單上的這種操作,我們發送Ajax請求到MVC控制器,以更新數據庫中的記錄,它會簡單地返回true以client.Here,我們已經使用WebSync 個出版者用戶模型實際上通知客戶當這個請求完成時,因爲這些操作需要一段時間來處理。

當我們從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); 
    }); 
}; 
+0

然而,我必須通過手動在databsource重置尋呼,區域值,劍術重新初始化datasource.At的同時,我使用數據綁定事件綁定那些初始值。這是完美的工作;) – marvelTracker