2012-02-26 1 views
2

Обновлено У меня проблемы с отправкой данных с помощью пользовательского форматирования.Пользовательский форматтер 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; 
       } 
      } 
     .... 

Update

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

ответ

1

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

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

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

+0

THX Олег. Уже проверен результат JSON, и все в порядке. У меня есть разные идентификаторы для каждой строки ... но теперь я только что обнаружил, что пользовательский форматирующий элемент всегда указывает на последнюю строку сетки. На самом деле, если я получаю rowObject [0], например, у меня есть значение столбца 0, последней строки моей сетки! Это так странно. Я тестировал раньше, и у меня были разные значения для rowObject [0] ... – Larry

+0

Я изменил вопрос, потому что options.rowId отлично работает. Я старался, чтобы это было проблемой этого свойства, потому что, как чистое совпадение, значение было 1. Таким образом, проблема другая ... THX – Larry

+1

@Larry: Если бы вы включили тестовые данные JSON и определение jqGrid, которые можно использовать для воспроизведения ваша проблема я постараюсь решить проблему. – Oleg

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]. "

Смежные вопросы