2013-03-04 6 views
1

У меня есть модель в ExtJS так:массив данных как модель собственности в ExtJS

Ext.define('Game', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'id', type: 'int' }, 
     { name: 'Name', type: 'string' }, 
     //{ name: 'levels' , type:'array'}, 
    ] 
}); 

Я хочу использовать эту модель для магазина сетки, но третье свойство

// {name: 'levels', type: 'array'}

- массив данных, который я хочу показать им в динамически созданных столбцах моей сетки. Я думаю, что ассоциации на модели extjs могут принести мне решение, но я смущен, как их использовать. Любое решение будет оцениваться.

+0

Вы можете создать свои собственные ['Ext.data.Types'] (http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Types) и конвертировать ваши пользовательские данные. – A1rPun

+1

Вам нужно уточнить свой вопрос; что хранится в этом массиве и как вы хотите отображать его в своей сетке? – sra

ответ

9

Просто используйте тип: «авто», и ваш массив будет нетронутым.

Ext.define('Game', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'id', type: 'int' }, 
     { name: 'Name', type: 'string' }, 
     { name: 'levels' , type:'auto'}, 
    ] 
}); 

И тогда вы могли бы определить столбцы с рендереров следующим образом:

columns: [ 
    { 
     text: "ID", 
     dataIndex: "id" 
    }, 
    { 
     text: "Name", 
     dataIndex: "Name" 
    }, 
    { 
     text: "Array Item 1", 
     dataIndex: "levels", 
     renderer: function(value){ 
      return levels[0]; 
     } 
    }, 
    { 
     text: "Array Item 2", 
     dataIndex: "levels", 
     renderer: function(value){ 
      return levels[1]; 
     } 
    } 
] 

Если вы хотите, чтобы динамически добавлять столбцы элементов в массиве, вы на самом деле нужно выяснить, какая запись имеет массив с наибольшим количеством элементов в нем, а затем добавьте столько столбцов, сколько вам нужно для массива столбцов, а затем установите столбцы сетки с помощью метода .configure. Вероятно, это может быть сделано в событии загрузки магазина.

+1

Просто FYI, все неизвестные типы устанавливаются в auto;) – sra

+1

просто хотел прояснить код ... – Reimius

+0

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

0

Предположив это данные для вашей модели -

{ 
    "id": 1, 
    "name": "game", 
    "levels": ["level 1", "level 2", "level 3"] 
} 

Вы всегда можете определить модель как

Ext.define('Game', { 
    extend: 'Ext.data.Model', 
    requires: [ 
     'Ext.data.field.Integer', 
     'Ext.data.field.String' 
    ], 
    fields: [ 
     { 
      name: 'id', type: 'int' 
     }, 
     { 
      name: 'Name', type: 'string' 
     }, 
     { 
      name: 'levels' 
     } 
    ] 
}); 

Оставив тип пустой будет интерпретироваться как «авто» и, таким образом, не преобразование будет быть применены к этому полю.

PS: Умните запятые. :)

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