jqGrid строка индекса colmodel, содержащая точку - PullRequest
1 голос
/ 28 декабря 2011

Мы обновляем как jQuery, так и jqGrid в проекте и обнаружили возможную ошибку в jqGrid.Версии, с которыми мы работаем:

  • jQuery 1.4.1 обновлен до 1.7.1
  • jqGrid 3.8.2 обновлен до 4.2.0

Мыиспользуют параметр индекса colmodel как для сортировки, так и для поиска / фильтрации.Проблема, которую мы обнаружили, появляется, когда строка индекса содержит точку.Например, «Customer.Name».

$('#grid').jqGrid({
  url: 'some/controller/action',
  datatype: 'json',
  colNames: ['Customer Name'],
  colModel: [{ name: 'CustomerName', index: 'Customer.Name' }]
});

$('#grid').jqGrid('filterGrid', '#filter',
{
  filterModel: [{ label: 'Customer Name', name: 'CustomerName', stype: 'text' }]
});

Когда используется поиск, браузер создает исключение следующим образом:

Syntax error, unrecognized expression: [name=Customer.Name]
http://localhost:8000/Scripts/jquery-1.7.1.js Line 4179

Исключение происходит из строки 465 в grid.addons.js, который выглядит следующим образом:

447: nm = this.index;
465: v = $("input[name="+nm+"]",self).val();

Код находится внутри каждого оператора и получает значение из colModel / filterModel, поэтому this - это каждый элемент в этом массиве.

ПослеВ некоторых исследованиях мы обнаружили, что в jQuery 1.5 для селектора атрибута требуются кавычки вокруг значения, которое сетка, похоже, не использует, и, следовательно, происходит сбой при поиске элемента.

Вопрос: есть ли обходной путь для этого?или мы должны опубликовать ошибку в jqGrid и надеяться, что они исправят ее в ближайшее время?

Мы пытались убежать от точки и окружить строку кавычками, но ничего не помогает.

1 Ответ

1 голос
/ 28 декабря 2011

Модуль grid.addons.js содержит такие методы, как filterGrid, которые больше не поддерживаются. Вместо этого вы можете просто разместить информацию о поиске прямо в postData (подробности см. здесь )

Если вы хотите использовать код из grid.addons.js, вы должны поддерживать код самостоятельно. Для решения вашей текущей проблемы вы можете использовать $.jgrid.jqID, который экранирует любые метасимволы , используемые внутри селекторов jQuery. Попробуйте заменить

v = $("input[name="+nm+"]",self).val();

до

v = $("input[name=" + $.jgrid.jqID(nm) + "]", self).val();

Я думаю, что это должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...