2013-05-28 2 views
0

У меня проблема с отображением моего JSON в таблице правильно. Я использую handsontable для создания сетки на веб-сайте. Как мне кажется, все, что мне нужно сделать, - отправить данные в правильном формате JSON на handsontable link.Почему данные, отправленные JSON, отображаются неправильно в таблице?

Я использую struts2-json-plugin для сериализации объекта Java в формате JSON, и этот JSON ниже генерируется плагином автоматически.

К сожалению, после отправки JSON в режим handsontable в таблице есть только значения, такие как [object Object], который встречается только в первой ячейке таблицы, а не в реальных значениях, которые должны отображаться в целой строке (в разных столбцах) не только в первая клетка ...

  • Скриншот с моим неправильным столбцов таблицы и значения:

enter image description here

  • Скриншот с ожидаемым столбцов таблицы и значения:

enter image description here

Я посылаю JSON из внутреннего интерфейса, как это:

{ 
    "values": [ 
    { 
     "fieldDTO": [ 
     { 
      "value": "Elda" 
     }, 
     { 
      "value": "HCPP" 
     }, 
     { 
      "value": "Yes" 
     }, 
     { 
      "value": "Green" 
     } 
     ] 
    } 
    ], 
    "headers": [ 
    "Name", 
    "Qualification", 
    "Certification", 
    "Classification" 
    ], 
    "rows": [ 
    "Albania" 
    ] 
}; 

Отображение таблицы, как это:

<div id="spreadsheet"></div> 
$("#spreadsheet").handsontable({ 
    startRows: 4, 
    startCols: 20, 
    rowHeaders: data.rows, 
    colHeaders: data.headers, 
    data: data.values, 
    contextMenu: true, 
    width: 1000, 
    manualColumnResize: true, 
    manualColumnMove: true, 
    columnSorting: true 
}); 

FIDDLE: Вы можете проверить это в FIDDLE HERE.

Почему это не удается? Является ли мой формат JSON некорректным для отображения данных в каждом столбце? Мне нужно отобразить List of collection FieldDTO в одной строке, поэтому JSON имеет форму, как указано выше. Как сделать этот код (отображение данных в таблице) работать правильно?

ответ

1

Вы должны указать атрибут columns в handontable называется для того, чтобы копаться в ваш (немного странным, смотри ниже) структуры данных:

http://jsfiddle.net/dwu2E/

$("#spreadsheet").handsontable({ 
    // etc... 
    columns: [ 
    { data: "fieldDTO.0.value" }, 
    { data: "fieldDTO.1.value" }, 
    { data: "fieldDTO.2.value" }, 
    { data: "fieldDTO.3.value" } 
    ] 
}); 

See the docs for the array syntax for more info.

Я говорю «странно», потому что было бы гораздо лучше иметь столбцы с соответствующим именем в объекте, а не в массиве. Структуры, основанные на позиции, являются хрупкими.

+0

Хорошо, как вы сказали, я не могу так поступать. Я начал реализацию, как это, потому что мне нужно отображать в каждой строке таблицы: ** список объектов **, но не только ** один объект ** для каждой строки. Итак, в моей ситуации у меня есть список объектов с одним свойством 'value' для отображения вместо одного объекта с несколькими свойствами, свойства которых могут быть сопоставлены с столбцами. Вот почему мне нужно искать какую-то идею, как это сделать правильно. У вас есть идея? – Roman

+0

@Roman Вы можете сделать практически любое сопоставление столбцов, которое вам нужно, обратившись к документам, с которыми я связан. Данные, которые вы возвращаете, должны быть основаны на строках, но использование вложенных объектов и индексация в них выглядит тривиальным. –

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