2013-06-10 28 views
5

Chỉnh sửa hàng loạt lưới Kendo được bật, tôi biết rằng bạn có thể móc vào tạo, cập nhật và hủy các lệnh mà Kendo sẽ gửi 3 lệnh riêng biệt tới máy chủ khi bạn nhấp vào Lưu thay đổi.Chỉnh sửa hàng loạt lưới Kendo - thực hiện một cuộc gọi để lưu

Tôi đã tự hỏi liệu có cách nào để gửi tất cả ba bộ bản cập nhật dưới dạng một cuộc gọi đến máy chủ giống như một giao dịch hay không. Hoặc thậm chí gửi từng đơn đặt hàng được chỉ định, với một kiểm tra để thành công trước khi gửi tiếp theo. Cách duy nhất tôi có thể đưa ra là thực hiện tùy chỉnh Lưu Thay đổi, khi được viện dẫn, sẽ tra cứu nguồn dữ liệu lưới để tìm ra tất cả các hàng đã được thêm (isNew() cho các hàng đã thêm), đã xóa (_destroyed cho các hàng đã xóa), được cập nhật (isDirty cho các hàng đã cập nhật) và sau đó tạo lời gọi của riêng tôi đến một điểm cuối máy chủ bằng cách sử dụng ajax bằng cách sử dụng các bộ dữ liệu đã xác định.

Trả lời

1

Có lẽ bạn có thể kích hoạt batch tài sản của Datasource

batch Boolean (mặc định: false)

Nếu thiết lập là true nguồn dữ liệu sẽ yêu cầu hoạt động hàng loạt CRUD. Ví dụ: việc cập nhật hai mục dữ liệu sẽ gây ra một yêu cầu HTTP thay vì hai yêu cầu. Theo mặc định, nguồn dữ liệu tạo một yêu cầu HTTP cho mọi hoạt động CRUD.

Nguồn: Datasource API

+1

Cảm ơn @Romain. Đó là những gì tôi có nghĩa là bằng cách bật chỉnh sửa hàng loạt. Tôi có hàng loạt: true được đặt trên nguồn dữ liệu của mình. Kendo sẽ gửi một yêu cầu HTTP cho một tập hợp các hàng được cập nhật, một yêu cầu HTTP riêng biệt để tiêu diệt tất cả các hàng đã bị xóa. Nhưng tôi muốn một yêu cầu HTTP cho tất cả các bản cập nhật, tạo và xóa được thực hiện. – Deepak

12

Telerik đăng tải một công việc xung quanh trong thư viện mã của họ thời gian gần đây: http://www.kendoui.com/code-library/mvc/grid/save-all-changes-with-one-request.aspx. Thật không may là công việc xung quanh là khá trần xương. Nó đưa ra một ví dụ tốt về cách ghi lại các bản ghi bị phá hủy, bẩn và mới nhưng kết thúc bằng một số tay vẫy tay để xử lý bất kỳ lỗi nào trong phản hồi và đồng bộ hóa nguồn dữ liệu thành công. Cũng lưu ý rằng không có kiểm tra để đảm bảo có hồ sơ bị phá hủy, bẩn hoặc mới trước khi thực hiện yêu cầu ajax.

Đây là mã có liên quan. Tải xuống ví dụ đầy đủ từ liên kết ở trên để xem cách thiết lập lưới và để đảm bảo bạn có phiên bản mới nhất.

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(); 
     } 
    }) 
} 
Các vấn đề liên quan