как установить postData в jqgrid ПОСЛЕ того, как он был построен? - PullRequest
7 голосов
/ 31 мая 2011

Я генерирую свой jqgrid из класса модели, который я передаю в поле зрения. Я получаю и работает jqgrid. Однако я хочу установить postData в одном представлении, где я использую jqGrid, из сценария в этом представлении после вызова помощника для создания jqgrid без необходимости изменения всего частичного представления, создающего jqgrid.

Я пытался запустить

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

и

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

но без ошибок или каких-либо результатов. Если я устанавливаю postData в параметрах jqgrid (в частичном представлении, где он построен, он работает.

Я также проверил, что сетка существует, добавил

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

перед первой строкой и показывает 1.

ОБНОВЛЕНИЕ: Эта функция .setGirdParam начала работать для меня без видимой причины, поэтому я приму ответ, если кто-то может дать некоторое представление о том, что может помешать этому. Спасибо

Ответы [ 3 ]

11 голосов
/ 31 мая 2011

Вы не включили определение jqGrid в свой вопрос, и мы не можем увидеть место , где называется setGridParam. Прежде всего, вы должны использовать setGridParam после , когда jqGrid создан, но за до запрос будет отправлен. Если вы измените postData , следующий запрос jqGrid может использовать новый параметр. Поэтому обычно используется

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

см. здесь .

Я полагаю, что лучшим вариантом для вас будет использование функции test свойства postData в качестве функции:

$("#@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 ...
});

Подробнее см. здесь . Таким образом, вы можете реализовать практически любой сценарий.

Кстати, если вы не хотите, чтобы jqGrid отправлял какой-либо запрос на сервер до наступления события, вы можете использовать datatype:'local' во время инициализации. Затем, если вы хотите, чтобы сетка была заполнена, вы можете использовать setGridParam, чтобы изменить datatype с 'local' на 'json' (или 'xml') и вызвать .trigger('reloadGrid',...).

2 голосов
/ 20 декабря 2012
$("#grid id").setGridParam({ postData: {data:dataval} });
$("#grid id").trigger('reloadGrid', [{page:1,data:dataval}]);ntn
1 голос
/ 05 октября 2013

Вот метод, который я использовал

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