jqGrid, динамически устанавливаемые ссылки редактирования / удаления на основе данных строки - PullRequest
1 голос
/ 27 декабря 2011

Мне нужно сделать jqGrid для динамической установки URL для редактирования и удаления, в зависимости не только от идентификатора выбранной строки, но и от содержимого столбцов другой строки. Все примеры, которые я нашел, имеют дело с onclickSubmit, в котором выставлено только поле "id". Любые советы?

Ответы [ 3 ]

3 голосов
/ 27 декабря 2011

Существует только одно значение для редактирования и удаления: 'editurl'. Так что вам нужно будет только обновить это. Вы можете изменить значение для editurl с помощью setGridParam, например так:

$("#jqGridTable").setGridParam('editurl', 'myNewUrl/foo');

Если вы хотите создать этот URL с использованием логики на основе содержимого выбранной в данный момент строки, выполните что-то вроде этого:

onSelectRow: function(id){
    var rowData = $("#jqGridTable").getRowData(id);
    // example logic
    if (rowData['col1'] == 'foo' && rowData['col2'] == 'bar')
      $("#jqGridTable").setGridParam('editurl', 'myNewUrl/foo/bar');
    else
      $("#jqGridTable").setGridParam('editurl', 'myNewUrl/foo');
}
2 голосов
/ 27 декабря 2011

Я решил написать свой ответ только потому, что Джейк Физель написал ". В его ответе есть только одно значение для редактирования и удаления: 'editurl' ". Я думаю, что есть много способов, и лучший зависит от других требований.

Обычно данные, отправляемые на сервер, состоят из частей дерева

  1. Тип HTTP-запроса, такой как POST, PUT или DELETE
  2. Часть URL до '?' символ
  3. Параметры URL до после «?» символ
  4. Тело HTTP-запроса

По умолчанию jqGrid использует HTTP-запрос POST и помещает информацию об идентификаторе (или разделенном запятыми списке идентификаторов в случае multiselect: true) в теле HTTP-запроса. Если вы измените тип HTTP-запроса, вам может потребоваться изменить место информации, которую вы отправляете на сервер, например, с тела на URL. В случае использования сервисов RESTful на стороне сервера следует использовать HTTP DELETE для операции удаления и иметь пустое тело в регистре.

В любом случае можно использовать некоторые функции обратного вызова (события), чтобы заполнить дополнительную информацию о редактировании или удалении строки. Внутри функций обратного вызова можно использовать методы getRowData или getCell , чтобы получить дополнительную информацию для других ячеек строки удаления или редактирования. Иногда зависит от конкретной ситуации, какие методы не будут работать. Это будет в случае редактирования ячейки встроенного редактирования, если вы попытаетесь получить информацию из ячейки, в которой изменяются значения на <input>, <select> или другие элементы управления во время редактирования. В этом случае существуют другие приемы, которые можно использовать в качестве обходного пути (см., Например, здесь ).

Один из способов - изменить URL-адрес внутри onSelectRow, так как один удаляет или редактирует последнюю выбранную строку. Я бы использовал $(this) вместо $("#jqGridTable").

Другой способ - изменить url внутри onclickSubmit (см. здесь и здесь ).

В обоих случаях я бы порекомендовал использовать , только если нужно изменить часть URL до '?' символ . Если вам нужно просто добавить дополнительные параметры к URL-адресу, например paramNama=paramValue, разделенное на &, лучше использовать вместо них параметры editData или delData . Параметры могут содержать функции. См. здесь или здесь .

Если вам нужно изменить тело запросов, которые вы можете использовать serializeDelData или serializeEditData.

Таким образом, есть много способов, и наилучший способ зависит от ваших других требований.

1 голос
/ 06 июня 2012

Я думаю, что есть опечатка выше.Это должно быть

$("#jqGridTable").setGridParam({'editurl':'myNewUrl/foo/bar'}); 

, а не

$("#jqGridTable").setGridParam('editurl', 'myNewUrl/foo/bar'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...