2010-10-14 33 views
19

Làm cách nào để tạo lưới nhưng không tải bất kỳ dữ liệu nào?jqGrid - cách đặt lưới KHÔNG tải bất kỳ dữ liệu nào ban đầu?

Nếu tôi bỏ qua tùy chọn url thì cuộc gọi lại loadError được kích hoạt.

Hiện tại chúng tôi đặt url:NoData.json trong đó NoData.json là tệp tĩnh không có hàng nào trong đó.

Sự cố nằm trong số gọi lại loadComplete của chúng tôi, chúng tôi muốn gửi thư nếu lưới không chứa dữ liệu - ngoại trừ chúng tôi không muốn hiển thị thông báo này khi tải ban đầu. Hiện tại, chúng tôi xử lý việc này như sau:

//jqGrid load complete handler 
function loadComp(grid) { 
    if (grid.getGridParam("url") != "NoData.json" && grid.getGridParam("records") == 0) { 
     setStatus("Your search did not return any results"); 
    } 
} 

Điều này có vẻ hơi khó hiểu .. chỉ muốn có lưới không tải bất kỳ dữ liệu nào ban đầu.

Bất kỳ ý tưởng nào?

Trả lời

31

Ban đầu, bạn chỉ nên sử dụng datatype: 'local'. Tại thời điểm này khi bạn cần phải tải các dữ liệu bạn nên thay đổi datatype để json hay xml:

$("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 
+0

Đã cố gắng - vấn đề là với 'datatype: local' và không có' url', hàm gọi lại 'loadComplete' của tôi vẫn được gọi. Tôi đã hy vọng cho một cách tiếp cận mà sẽ không kích hoạt gọi lại - hoặc ít nhất là một cách sạch hơn trong cuộc gọi lại để xác định đây là lần đầu tiên lưới được nạp. –

+4

@Marcus: nguyên nhân xử lý sự kiện 'loadComplete' sẽ được gọi trong mọi tình huống. Nếu bạn muốn hiển thị thông báo chỉ trong trường hợp tải từ máy chủ, bạn có thể hiển thị thông báo chỉ khi 'datatype' bằng" json "như trong http://stackoverflow.com/questions/3564898/jqgrid-programatically-select -grid-row/3571392 # 3571392 – Oleg

+2

Giải pháp 'grid.getGridParam ('datatype') ===" json "' hoạt động độc đáo .. –

18

Tôi muốn tạo ra một mạng lưới mà tải không có dữ liệu khi trang web được tải nhưng tải dữ liệu, khi người dùng nhấp làm mới hoặc sử dụng tìm kiếm. Giải pháp của tôi hơi khó hiểu nhưng rất dễ dàng và hoạt động tốt.

Tôi đang sử dụng sự kiện gọi lại loadBeforeSend để dừng yêu cầu ajax cho dữ liệu khi trang được tải. Hàm gọi lại của tôi tự xóa bỏ nó vì vậy nó sẽ chỉ được thực thi một lần.

loadBeforeSend: function (xhr, settings) { 
    this.p.loadBeforeSend = null; //remove event handler 
    return false; // dont send load data request 
} 
+0

Tôi sẽ lên tới đâu trong 20 lần? –

+0

Tại sao đây không phải là câu trả lời tôi đã sử dụng trên tất cả các lưới của tôi (những cái mà không cần phải tải) –

+0

Chỉ là những gì tôi đang tìm kiếm, cảm ơn! – masterwok

-2

Không đặt URL khi bạn khởi tạo lưới. Đặt URL ngay trước khi tải lưới bằng hàm setGridParam.

Nó phù hợp với tôi.

Các vấn đề liên quan