Пользовательский форматировщик jqgrid: Пользовательский форматировщик всегда возвращает последнюю строку сетки. Зачем? - PullRequest
2 голосов
/ 26 февраля 2012

Обновлено У меня проблемы с указанием данных с помощью пользовательского форматера.

Я использую пользовательский форматтер jqgrid.

  function myformatter ( cellvalue, options, rowObject )
  {
   ....

Теперь мой пользовательский форматировщик указывает всегда на последний ряд сетки . Фактически, если я получу, например, rowObject[0], у меня будет значение [колонка 0, последняя строка] моей сетки. Почему?

Данные сетки правильно скомпилированы, и я уже проверил содержимое объекта Json.

Вот мой пользовательский форматер:

         ......
         { name: 'act', index: 'Detail', width: 50, sortable: false, search: false,
              formatter: function (cellvalue, options, rowObject) {
                  i = options.rowId;

                  var tst = '<a class="nau" name="nau" onClick="alert(i);return false;" href="#"></a>';
                  var det = '<a class="det" name="det" onClick="alert(this.name);return false;" href="#"></a>';
                  return tst + det;
              }
          }
         ....

Обновление

Я заметил, что форматер работает нормально, если я возвращаю нужную строку (например, return rowObject[0] работает нормально ), в то время как у меня возникают проблемы , когда я использую переменные . Более того, если я попытаюсь сделать onclick=alert(rowObject[0]), я получу исключение о том, что rowObject не существует. Я думаю, что это проблема: если я установлю t = rowObject[0], тогда форматер использует t в качестве статической переменной вместо обновления ее для каждой строки. То же самое, если я установлю i = options.rowId, где i остается статичным ... ПОЧЕМУ ? Что мне делать?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Мне удается заставить это работать ... Я должен сказать, что я чувствую себя немного смущенным ... это была глупая ошибка. Надеюсь, мы все равно сможем помочь таким неопытным, как я. Я не помещал переменные вне кавычек :

      ......
     { name: 'act', index: 'Detail', width: 50, sortable: false, search: false,
          formatter: function (cellvalue, options, rowObject) {
              i = options.rowId;

              var tst = '<a class="nau" name="nau" onClick="alert('+i+');return false;" href="#"></a>';
              var det = '<a class="det" name="det" onClick="alert(this.name);return false;" href="#"></a>';
              return tst + det;
          }
      }
     ....

Я цитирую драгоценную помощь от @ Oleg : «Код в onclick будет выполняться отдельно, поэтому вам придется использовать значения переменных, а не имена. Например, 'onclick="alert(rowObject[0]);return false;"' приведет к ошибка, так как глобальный массив rowObject не существует. Вы должны изменить код, чтобы использовать 'onclick="alert(' + rowObject[0] + ');return false;"', который поместит значение rowObject[0] в код. "

1 голос
/ 26 февраля 2012

Полагаю, у вас есть проблемы с заполнением сетки. Если options.rowId одинаково для всех строк, то вы заполняете сетку неверными данными, где id всегда равно 1.

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

Кроме того, вы должны использовать onclick вместо onClick. Ваш текущий код может работать сейчас, но он не будет больше работать, если вы измените DOCTYPE.

...