2013-06-10 13 views
5

Włączona edycja wsadowa Kendo, wiem, że możesz podłączyć się do poleceń tworzenia, aktualizacji i niszczenia, w których Kendo wyśle ​​3 oddzielne komendy do serwera po kliknięciu Zapisz zmiany.Edytowanie wsadowe Kendo - wykonanie pojedynczego połączenia w celu zapisania

Zastanawiam się, czy był jakiś sposób, aby wysłać wszystkie trzy zestawy aktualizacji jako pojedyncze połączenie z serwerem - jak transakcja. Lub nawet wysłać każdą w określonej kolejności, z czekiem na sukces przed wysłaniem następnego.

Jedyny sposób, w jaki mogłem wymyślić, to mieć niestandardową implementację Save Changes, która po wywołaniu szuka źródła danych siatki, aby znaleźć wszystkie dodane wiersze (isNew() dla dodanych wierszy), usunięte (_destroyed dla usuniętych wierszy), zaktualizowany (isDirty dla zaktualizowanych wierszy), a następnie spreparować moje własne połączenie do punktu końcowego serwera przy użyciu ajaxa przy użyciu zidentyfikowanych zestawów danych.

Odpowiedz

1

Może można włączyć własność Datasource

partii Boolean (default: false) batch

Jeśli jest ustawiona na prawdziwego źródła danych będą żądania operacji partii CRUD. Na przykład aktualizacja dwóch elementów danych spowodowałaby jedno żądanie HTTP zamiast dwóch. Domyślnie źródło danych wysyła żądanie HTTP dla każdej operacji CRUD.

Źródło: Datasource API

+1

Dzięki @Romain. To właśnie miałem na myśli, włączając edycję zbiorową. Mam zestaw wsadowy: true w moim źródle danych. Kendo wyśle ​​jedno żądanie HTTP dla zestawu zaktualizowanych wierszy, oddzielne żądanie HTTP do zniszczenia ze wszystkimi usuniętymi wierszami. Ale chciałbym jednego żądania HTTP dla wszystkich aktualizacji, tworzenia i usuwania. – Deepak

12

Telerik pisał obejście w swojej biblioteki kodu ostatnio: http://www.kendoui.com/code-library/mvc/grid/save-all-changes-with-one-request.aspx. Niestety, obejście jest raczej proste. Daje dobry przykład, jak przechwytywać zniszczone, brudne i nowe rekordy, ale kończy się, gdy macha ręką, aby poradzić sobie z błędami w odpowiedzi i synchronizować źródło danych po sukcesie. Zwróć też uwagę, że nie ma kontroli, aby upewnić się, że są zniszczone, brudne lub nowe zapisy przed złożeniem prośby o ajax.

Oto odpowiedni kod. Pobierz pełny przykład z powyższego linku, aby zobaczyć, jak sieć jest skonfigurowana i aby upewnić się, że masz najnowszą wersję.

function sendData() { 
    var grid = $("#Grid").data("kendoGrid"), 
     parameterMap = grid.dataSource.transport.parameterMap; 

    //get the new and the updated records 
    var currentData = grid.dataSource.data(); 
    var updatedRecords = []; 
    var newRecords = []; 

    for (var i = 0; i < currentData.length; i++) { 
     if (currentData[i].isNew()) { 
      //this record is new 
      newRecords.push(currentData[i].toJSON()); 
     } else if(currentData[i].dirty) {   
      updatedRecords.push(currentData[i].toJSON()); 
     } 
    } 

    //this records are deleted 
    var deletedRecords = []; 
    for (var i = 0; i < grid.dataSource._destroyed.length; i++) { 
     deletedRecords.push(grid.dataSource._destroyed[i].toJSON()); 
    } 

    var data = {}; 
    $.extend(data, parameterMap({ updated: updatedRecords }), parameterMap({ deleted: deletedRecords }), parameterMap({ new: newRecords })); 

    $.ajax({ 
     url: "/Home/UpdateCreateDelete", 
     data: data, 
     type: "POST", 
     error: function() { 
      //Handle the server errors using the approach from the previous example 
     }, 
     success: function() { 
      alert("update on server is completed"); 

      grid.dataSource._destroyed = []; 
      //refresh the grid - optional 
      grid.dataSource.read(); 
     } 
    }) 
} 
Powiązane problemy