Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как установить postData в jqgrid ПОСЛЕ того, как он был построен?

Автор вопроса: Goran ObradovicОтветов: 2

Я генерирую 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 начала работать у меня без видимой причины, поэтому я приму ответ, если кто-то может дать некоторое представление о том, что может помешать этому работать. Спасибо

jqueryjqgrid

Ответы

Ответ 1 · рейтинг 12 · Oleg

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

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

см. здесь.

Полагаю, что лучшим вариантом для вас будет использование свойства function 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 · рейтинг 1 · user2675617

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы