2

以下の技術を用いたWebサイトを実装しています。

クライアント: Html5、KendoUI、WebSync(パブリッシュ、サブスクライバー)

サーバー: ASP.net MVC 3.0

グリッドには、行ごとに特定の操作があります。たとえば、特定の行のチェック ボックスをオンにした後、操作メニューをクリックして、各行のステータスを更新する必要があります。

メニューでこの操作を行う場合、MVC コントローラーに ajax リクエストを送信してデータベースのレコードを更新すると、単にクライアントにtrue が返さます。これらの操作は処理する必要があります。

Web Syncからコールバックを取得すると、剣道データ グリッドを次のように更新します。

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 に答える