2015-05-01 5 views
-3

У меня есть вложенные данные json с объектами. Учетная запись и категория. Категория находится в учетной записи json data. Я передаю столбцы по умолчанию для функции map, и она создает мои столбцы. Но если я передаю Category.Name i can not см. на экране. Как я могу передать имя свойства вложенных данных этой функции?Передайте имя вложенного json-элемента в функцию

//Default Columns: 
this.defaultColumns = ["Name","Limit","Category.Name"];  

//My Function: 
that.props.results.map(function(rowData){ 
      return (
       <tr> 
       {that.props.defaultColumns.map(function (column) { 
        return (
         <td>{rowData[column]}</td> 
        ); 
       </tr>})} 

JSON данные:

[{ 
    "RowNumber":"e0275f18-f86a-1d2e-97e6-b8ce9a4a7fef", 
    "Name":1, 
    "Limit":78, 
    "Category":{ 
     "RowNumber":"b72a77db-8c44-8b59-5044-3c42595203aa", 
     "Name":"Produce" 
    } 
}] 
+0

Образец вашего JSON будет более ясным, чем его описание. –

+0

Я добавляю данные json – user1924375

+0

'' недопустимый синтаксис в JavaScript, если только это .jsx React. Вы хотите вернуть строку? – azium

ответ

1

Я не уверен, если вы знаете, что или нет, но вы не можете получить доступ к вложенной собственности через rowData['Category.Name']. Это буквально пытаются получить доступ к свойству с именем Category.Name, то есть он будет работать, если у вас объект как

{ 
    'Cateogry.Name': 42 
} 

Одна вещь, которую вы можете сделать, это указать функции визуализации для каждого из столбцов. Эти функции рендеринга определяют способ доступа к данным для каждого столбца. Например:

var columnRenderer = { 
    Name: x => x, 
    Limit: x => x, 
    Category: x => x.Name 
}; 

Тогда, учитывая ваши столбцы как

//Default Columns: 
this.defaultColumns = ["Name","Limit","Category"];  

Вы можете визуализировать таблицу с

that.props.results.map(
    rowData => 
    <tr> 
     {that.props.defaultColumns.map(
     column => <td>{columnRenderer(rowData[column])}</td> 
    )} 
    </tr> 
); 

(Примечание: Я использую функции стрелок здесь, компонент ES6, поэтому, если вы используете инструменты командной строки jsx, вам необходимо передать опцию --harmony или вместо этого использовать обычные функции).

+0

Я использую это в grid.And его во много страниц. Как я могу написать эту общую версию? – user1924375

+0

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

+0

Да, я не хочу писать рендерер для каждого столбца. [ "Name", "Limit", "Категория"]; Я хочу передать имена столбцов, подобные этому, и метод будет обрабатывать это. – user1924375

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