Вложенный json data в gridpanel
[ExtJs 4]
Подскажите, как отобразить след. json код в gridpanel
[
{
"id":1,"name":"Andrew",
"orders":[{
"id":1,"name":"foo"
},{
"id":2,"name":"bar"
}]
}
]
Мне необходима таблица след .вида: id | name | orders ---+----------+--------- 1 | Andrew | foo | | bar ---+----------+--------- Возможно ли такое в Extjs? |
Цитата:
http://docs.sencha.com/ext-js/4-0/#!...n-cfg-renderer |
Ok, а каким образом сделать модель и store для хранения такой структуры и передать ее в grid panel? Я пробовал в модели использовать mapper:
Ext.define('User', {
extend: 'Ext.data.Model',
fields: [{
name: 'id', type: 'int'
},{
name: 'name', type: 'string'
},{
name: 'orders_name', mapping: 'orders.name'
}]
});
Но в grid в поле ассоциировым с orders_name (dataIndex: 'orders_name') ничего не выводится. Подскажите, в каком направлении копать. |
Цитата:
по дефолту он возвращает orders как массив из объектов, ну вот, пробегите по массиву и вытащите данные. |
Спасибо Большое!
Мне нужно на это поле вешать еще editor (Ext.grid.plugin.RowEditing) думаю combobox с multiSelect (так как несколько orders на одного юзера), данные, которые выделены по-умолчанию для этого combobox`а получается брать через ajax? |
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>пример</title>
<script type='text/javascript' src='http://docs.sencha.com/ext-js/4-0/extjs/ext-all.js'></script>
<link rel="stylesheet" type="text/css" href="http://docs.sencha.com/ext-js/4-0/extjs/resources/css/ext-all.css">
<script>
Ext.onReady(function() {
var states = Ext.create('Ext.data.Store', {
fields: ['abbr', 'name'],
data : [
{"abbr":"AL", "name":"Alabama"},
{"abbr":"AK", "name":"Alaska"},
{"abbr":"AZ", "name":"Arizona"}
]
});
var combo = Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose State',
labelAlign: 'right',
store: states,
queryMode: 'local',
multiSelect: true,
listeners: {
select: function(c) {
if( c.getValue().length>0 )
Ext.Msg.alert('мессага', 'Выбранные в комбо значения: '+c.getValue());
else
Ext.Msg.alert('мессага', 'Выбранных значений нет');
}
},
displayField: 'name',
valueField: 'abbr'
});
var botton = Ext.create('Ext.button.Button', {
text: 'Узнать выбранные значения',
style: 'margin-left: 5px;',
handler: function() {
combo.fireEvent('select', combo);
}
});
Ext.create('Ext.panel.Panel', {
border: false,
layout: 'column',
renderTo: Ext.getBody(),
items: [
combo, botton
]
});
});
</script>
<body>
</body>
</html>
|
| Часовой пояс GMT +3, время: 12:54. |