2013-06-26 29 views
7

Tôi có bộ lọc nằm ngoài jqGrid để kích hoạt tải lại lưới. Mục này đã cho tôi một số hiểu biết sâu sắc về cách thực hiện nó, sử dụng tùy chọn postData: How to filter the jqGrid data NOT using the built in search/filter box Thật không may là đoạn mã là các đoạn và tôi không thể biết được chuỗi tổng thể của các cuộc gọi. Dưới đây là một cái nhìn cô đọng về cách tiếp cận hiện tại của tôi:jqGrid: Cách gọi 'reloadGrid' để làm mới lưới từ bộ lọc ngoài

<script> 
    $(document).ready(function() { 
    $("#submit").click(function(e) { 
     e.preventDefault(); 
     myGrid.trigger('reloadGrid'); 
    }); 
    }); 

var url="${servicesUrl}/projects"; 

var myGrid = $("#projectList").jqGrid({ 
    url: url, 
    datatype: 'json', 
    mtype: 'GET', 
    // ... 
}); 
</script> 

Tôi nên cấu trúc mã sao cho mỗi lần nhấp vào nút Gửi sẽ kích hoạt tải lại lưới? Khi tôi đã sắp xếp xong, tôi chắc chắn tôi sẽ có thể thêm phần posData, vấn đề của tôi chủ yếu là với chuỗi các cuộc gọi tổng thể. Tôi không chắc chắn các cuộc gọi nào nên ở bên trong hàm ready() và cách gọi 'reloadGrid' đúng cách. Bất kỳ trợ giúp đánh giá rất nhiều.

Trả lời

6

Đây là những gì đã làm việc cho tôi: Tôi đặt lại cuộc gọi trên sự kiện beforeRequest cập nhật thuộc tính postData trước mỗi yêu cầu được thực hiện.

Lưu ý rằng bạn sẽ muốn đặt tất cả các mã init jqGrid của bạn bên trong $(document).ready(function(){}); chức năng, nếu không thì yếu tố bảng của bạn có thể không trong DOM chưa

var url="${servicesUrl}/projects"; 

$(document).ready(function() { 
    var $table = $("#projectList"); 

    $table.jqGrid({ 
     url: url, 
     datatype: 'json', 
     mtype: 'GET', 

     beforeRequest: function() { 
      var postData = $table.getGridParam('postData'); 
      //add parameters to postData here 
     } 
     // ... 
    }); 

    $("#submit").click(function(e) { 
     e.preventDefault(); 
     $table.trigger('reloadGrid'); 
    }); 
}); 
+1

cảm ơn bạn! Tôi chỉ cần làm theo chuỗi các cuộc gọi mà bạn đã cung cấp, và nó hoạt động hoàn hảo. Trong thực tế, tôi không cần phải sử dụng 'beforeRequest', tôi vừa thêm vào tùy chọn lưới của mình: postData: { \t \t brandId: function() {return jQuery ("# ​​brandsDropdown option: selected"). Val() ; }, \t \t}, – Pablo

+0

@Pablo Ah ... đẹp, tôi không biết bạn có thể sử dụng các hàm cho postData! Cảm ơn! – cfs

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