2011-05-31 26 views
7

Tôi tạo jqgrid của mình từ lớp mô hình mà tôi chuyển sang chế độ xem. Tôi được xây dựng và làm việc jqgrid. Tuy nhiên, tôi muốn đặt postData trên một chế độ xem, nơi tôi sử dụng jqGrid, từ tập lệnh trong chế độ xem đó, sau khi tôi gọi trình trợ giúp để tạo jqgrid, mà không phải thay đổi toàn bộ lượt xem một phần tạo jqgrid.cách đặt postData trong jqgrid SAU KHI nó đã được xây dựng?

Tôi cố gắng chạy

$("#@Model.Id").jqGrid('setGridParam', { postData: { test: 233} }); 

$("#@Model.Id").setGridParam({ postData: { test: 233} }); 

nhưng mà không có lỗi hoặc bất kỳ kết quả. Nếu tôi đặt POSTDATA trong thông số jqGrid (theo quan điểm của từng phần, nơi nó được xây dựng, nó hoạt động.

Tôi cũng kiểm tra lưới mà tồn tại, thêm

console.log($("#@Model.Id").size()); 

trước khi dòng đầu tiên, và nó cho thấy 1.

UPDATE: chức năng .setGirdParam này bắt đầu làm việc cho tôi không có lý do rõ ràng, vì vậy tôi sẽ chấp nhận câu trả lời nếu ai đó có thể đưa ra một số cái nhìn sâu sắc những gì có thể ngăn chặn điều này làm việc Cảm ơn

Trả lời

11

Bạn không bao gồm định nghĩa về. jqGri d trong câu hỏi của bạn và chúng tôi không thể thấy địa điểm nơi gọi số setGridParam. Trước hết, bạn nên sử dụng setGridParamsau jqGrid được tạo, nhưng trước yêu cầu sẽ được gửi. Nếu bạn thay đổi postDatayêu cầu jqGrid tiếp theo có thể sử dụng thông số mới. Vì vậy, một thông thường sử dụng

$("#@Model.Id").trigger('reloadGrid', [{page:1}]); 

xem here.

Tôi cho rằng lựa chọn tốt nhất cho bạn sẽ là sử dụng chức năng test tài sản của postData như chức năng:

$("#@Model.Id").jqGrid({ 
    // ... other jqGrid parameters ... 
    postData: { 
     test: function() { 
      // the code can by dynamic, read contain of some elements 
      // on the page use "if"s and so on and return the value which 
      // should be posted to the server 
      return 233; 
     } 
    } 
    // other jqGrid parameters ... 
}); 

Xem here để biết chi tiết. Bằng cách này, bạn có thể triển khai thực tế bất kỳ tình huống nào.

Bằng cách này nếu bạn không muốn jqGrid gửi bất kỳ yêu cầu nào đến máy chủ cho đến khi sự kiện xảy ra, bạn có thể sử dụng datatype:'local' tại thời điểm khởi tạo. Sau đó, nếu bạn muốn lưới điện được lấp đầy, bạn có thể sử dụng setGridParam để thay đổi datatype từ 'local' thành 'json' (hoặc 'xml') và gọi .trigger('reloadGrid',...).

+0

nhờ cho kỳ thi này: function() một phần, mà sẽ rất hữu ích, nếu không, tôi đã thực hiện tất cả mọi thứ theo trình tự bạn đã viết. Nó hoạt động bây giờ, nhưng nó không phải lúc đầu, và tôi không biết những gì tôi đã thay đổi :) –

+0

@obrad: Bạn không đăng mã của bạn mà bạn hiện đang sử dụng. Nếu một cái gì đó không hoạt động "ở đầu tiên", bạn nên kiểm tra những gì mã chính xác hoạt động "ở đầu tiên".Tôi cho rằng bạn có thể có những vấn đề như vậy và bao gồm trong câu trả lời của tôi một phần với việc sử dụng 'datatype' với' 'local'' ban đầu mà sẽ ngăn chặn việc nạp lưới đầu tiên. Sau khi giá trị mà bạn cần sử dụng bên trong 'test: function()' sẽ được biết bạn có thể thay đổi 'datatype' thành' 'json'' và buộc tải lưới bằng '.trigger (' reloadGrid ', ...) '. – Oleg

+0

Tôi đã không đăng nó vì nó được tạo ra, nhưng giả sử tôi nên đã đăng mã được tạo ra. Tuy nhiên, nó hoạt động ngay bây giờ. Cảm ơn sự giúp đỡ của bạn. –

1
$("#grid id").setGridParam({ postData: {data:dataval} }); 
$("#grid id").trigger('reloadGrid', [{page:1,data:dataval}]);ntn 
1

Dưới đây là phương pháp tôi sử dụng

postData: { 'testKey': function() { return 'testvals'; } }, 
+0

Gói một var toàn cầu để trở về từ một hàm như vậy đã làm việc hoàn hảo sao cho trigger reloadGrid lấy giá trị hiện tại của var và không phải là giá trị nó có khi lưới đầu tiên được tạo ra. tks. Vì vậy, nếu tôi có var testvals, thì postdata sẽ giống như sau: postData: {'testKey': function() {return testvals; }}, –

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