2010-10-03 21 views
6

Tôi cần phải vượt qua userData đến jqgrid, nhưng không thể tìm thấy bất kỳ ví dụ nào về cách thực hiện việc này. Đây là nỗ lực của tôi:Cách đọc userData trong jqgrid?

Sent từ máy chủ:

{ total: 25, 
    page: currentpage, 
    userData: {foo: 'bar'}, 
    rows: myRows } 

và trong jqGrid:

var data = jQuery("#grid").getGridParam('userData'); 

Làm thế nào tôi có thể gửi userData và đọc nó từ jqGrid?

CHỈNH SỬA: Tôi biết số userData của mình đang được gửi, vì tôi có thể thấy số này trong Fiddler. Tôi nghĩ rằng tôi chỉ bị mắc kẹt về cách đọc nó ở phía khách hàng.

Trả lời

16

Nói chung việc sử dụng userData là khá đơn giản. jqGrid cung cấp cho bạn hỗ trợ gửi từ máy chủ bất kỳ dữ liệu bổ sung nào sẽ được lưu cùng với dữ liệu jqGrid. Vì vậy, nếu jqGrid phân tích dữ liệu được trả về từ máy chủ thì nó chỉ tìm kiếm userdata (không cho userData !!!) và lưu nằm trong tham số nội bộ userData.

{ "total":25, 
    "page":1 
    "records":107, 
    "userdata": {"foo": "bar"}, 
    "rows": [...] } 

Hãy cẩn thận: thuộc tính mặc định trong các dữ liệu đầu vào phải được userdataKHÔNGuserData như bạn đang có. Bạn có thể ghi đè tên mặc định của thuộc tính đầu vào jsonReader: {userdata: "userData"} hoặc jsonReader: {userdata: "myData"} nếu bạn sử dụng userData hoặc myData làm tên thuộc tính với additional data của mình.

Một từ cách sử dụng tiêu chuẩn là userData là dành cho displaying of the footer trong jqGrid. Bạn có thể sử dụng dữ liệu cho bất kỳ đề xuất nào khác của bạn. Trong another answer, nó được hiển thị cách sử dụng userData để chọn một số hàng/hàng trực tiếp sau khi tải dữ liệu từ máy chủ.

Nếu bạn sử dụng tham số loadonce:true, việc sử dụng userData sẽ phức tạp hơn một chút vì sau lần tải đầu tiên dữ liệu từ tham số userData sẽ bị xóa, vì vậy bạn phải lưu ở đó trong đối tượng bên ngoài.

Nguyên nhân bạn có thể truy cập userData chỉ với jQuery("#grid").getGridParam('userData') sau khi dữ liệu được tải. Vì vậy, bạn nên làm điều này bên trong của loadComplete xử lý sự kiện hoặc sau đó. Bằng cách bên trong của loadComplete xử lý sự kiện, bạn có thể truy cập vào tất cả dữ liệu được gửi cho bạn từ máy chủ thông qua thông số data của sự kiện loadComplete. Vì vậy, bạn có thể đọc bất kỳ dữ liệu bổ sung nào khác và lưu ở đâu đó.

+1

Cảm ơn.Trong trường hợp bất cứ ai đọc điều này sau, tóm tắt là khi nói về một GridParam nó 'userData', nếu không nó là' userdata'. Đọc 'userdata' trong trình xử lý sự kiện' loadComplete'. Để đặt 'postData' với' userdata' làm điều này: 'loadComplete: function (data) {jQuery (" # ticketlist "). SetGridParam ({postData: {foo2: data.userdata.foo}});}' – royco

+0

@Slack : Bạn cũng có thể sử dụng 'jQuery (" # grid ") getGridParam ('userData')' bên trong 'loadComplete' như' loadComplete: function() {jQuery ("# ​​ticketlist"). SetGridParam ({postData: {foo2: jQuery ("# ​​lưới"). getGridParam ('userData'). foo}});} '. Điều quan trọng là phải hiểu rằng trong dữ liệu gửi từ máy chủ người ta phải đặt 'userdata' và dữ liệu sẽ được lưu trong tham số' userData' của jqGrid. Vì vậy, nó có thể được truy cập máng 'getGridParam ('userData')'. Nhưng điều quan trọng nhất là chương trình của bạn hoạt động và có thể sử dụng 'userdata' /' userData'. :-) – Oleg

+0

Tôi đã sử dụng userData thay vì userdata trong trình tạo json và tôi đã phát điên, cảm ơn rất nhiều! +1 – Neo

1

jqGrid theo mặc định chấp nhận JSON ở định dạng này.

{"rows": 
    [{"foo":"bar"}] 
} 

và thiết lập các tùy chọn jqGrid bạn sẽ làm một cái gì đó như thế này:

$("#cashflow-sheet").jqGrid({ 
    url:'bbc-json.html', 
    datatype: "json", 
     ... 
+0

Cảm ơn bài đăng của bạn. Tôi thực sự có jqgrid làm việc tốt và có thể hiển thị các hàng mà không có vấn đề gì. Tôi bỏ qua đoạn mã đó. Những gì tôi không hiểu là làm thế nào để sử dụng tính năng 'userData' của jqgrid. Điều này cho phép bạn gửi một mảng dữ liệu người dùng từ máy chủ đến lưới. – royco