Пользовательский форматировщик jqgrid: Пользовательский форматтер всегда возвращает последнюю строку сетки. Почему?

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

Я использую пользовательский форматировщик 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 останется статичным...ПОЧЕМУ? Что я должен делать?


person Larry    schedule 26.02.2012    source источник


Ответы (2)


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

      ......
     { 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] в код».

person Larry    schedule 27.02.2012

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

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

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

person Oleg    schedule 26.02.2012
comment
СПАСИБО Олег. Уже проверил результат JSON, все в порядке. У меня разные идентификаторы для каждой строки ... но теперь я только что обнаружил, что пользовательский форматтер всегда указывает на последнюю строку сетки. На самом деле, если я получаю rowObject[0], например, у меня есть значение столбца 0, последней строки моей сетки! Это так странно. Я тестировал раньше, и у меня были разные значения для rowObject[0]... - person Larry; 26.02.2012
comment
Я изменил вопрос, потому что options.rowId отлично работает. Я думал, что это проблема с этим свойством, потому что по чистому совпадению значение было 1. Так что проблема в другом... THX - person Larry; 26.02.2012
comment
@Larry: Если бы вы включили тестовые данные JSON и определение jqGrid, которые можно использовать для воспроизведения вашей проблемы, я бы попытался решить проблему. - person Oleg; 27.02.2012
comment
СПАСИБО Олег. К сожалению, я работаю с данными, которые не могу опубликовать, и я должен привести пример. Во всяком случае, я заметил, что форматер отлично работает, если я возвращаю строку напрямую, в то время как у меня возникают проблемы когда я использую переменные. Более того, если я попытаюсь выполнить onclick=alert(rowObject[0]), я получу исключение, говорящее, что rowObject не существует. Я думаю, что проблема в этом: если я установлю t = rowObject[0], форматировщик будет использовать t как статическую переменную, а не обновлять ее для каждой строки. - person Larry; 27.02.2012
comment
@Larry: код в onclick будет выполняться отдельно, поэтому вам нужно использовать значения переменных, а не имена. Например, 'onclick="alert(rowObject[0]);return false;"' выдаст ошибку, потому что глобальный массив rowObject не существует. Вы должны изменить код, чтобы использовать 'onclick="alert(' + rowObject[0] + ');return false;"', что поместит значение rowObject[0] в код. - person Oleg; 27.02.2012
comment
Спасибо большое Олег! Я понял, что это была глупая и досадная ошибка. На самом деле я собирался опубликовать ответ! Я благодарю за ценное сотрудничество, как обычно, вы всегда рядом! Искренне - person Larry; 27.02.2012