Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Ext grid combobox json (https://javascript.ru/forum/extjs/29175-ext-grid-combobox-json.html)

evgen.matyaschuk 18.06.2012 15:58

Ext grid combobox json
 
Всем привет.

Есть вот такое

<div id="main-data-grid" class="main-data-grid"></div>
<script type="text/javascript">
		Ext.onReady(function() {

			//Model
			Ext.define('Model', {
				extend: 'Ext.data.Model',
				fields: ['id', 'combo'],
				proxy: {
					url: '',
					type: 'ajax',
					extraParams: {
						'_method': 'get',
						'params[class]': 'data'
					},
					reader: {
						root: 'data'
					}
				}
				/*
					ответ сервера
					{
						success: 1,
						message: "Data loaded success.",
						data: [
							{
								id: "1",
								combo: "2",
								relation: {
									combo: {
										id: "2",
										name: "combo 2"
									}
								}
							}
						]
					}
				*/
			});

			Ext.define('ComboModel', {
				extend: 'Ext.data.Model',
				fields: ['id', 'name'],
				proxy: {
					url: '',
					type: 'ajax',
					extraParams: {
						'_method': 'get',
						'params[class]': 'comboData'
					}
				},
				reader: {
					root: 'data'
				}
				/*
					ответ сервера
					{
						success: 1,
						message: "Data loaded success.",
						data: [
							{
								id: "1",
								name: "combo 1"
							},
							{
								id: "2",
								name: "combo 2"
							}
						]
					}
				*/
			});

			//Store
			var store = Ext.create('Ext.data.Store', {
				model: 'Model',
				autoLoad: true
			});

			var comboStore = Ext.create('Ext.data.Store', {
				model: 'ComboModel'
			});

			//Grid
			Ext.create('Ext.grid.Panel', {
				plugins: [
					Ext.create('Ext.grid.plugin.CellEditing', {
						clicksToEdit: 2
					})
				],

				renderTo: Ext.getDom('main-data-grid'),
				store: store,
				columns: [
					{
						dataIndex: 'id',
						hidden: true,
						hideable: false
					},
					{
						header: 'Combo',
						dataIndex: 'combo',
						editor: { //проблема здесь, при 2 клике шлеться запрос на сервер, 
							xtype: 'combo', //получаем данные описанные выше в виде коментария под reader в ComboModel
							store: comboStore, //при этом выпадающий список пустой, в него эти данные не подгружаються
							displayField:'name'
						},
						renderer: function(val, cell, doc, idx) { //вместо 2 выводим "combo 2"
							return doc.raw.relation.combo.name;
						}
					}
				]
			});

		});
	</script>


как все таки заставить combobox выводить данные?

evgen.matyaschuk 18.06.2012 18:43

В ComboModel

reader: {
       root: 'data'
}


должен находиться внутри proxy

proxy: {
	url: '',
	type: 'ajax',
	extraParams: {
		'_method': 'get',
		'params[class]': 'comboData'
	},
	reader: {
		root: 'data'
	}
}


а не

proxy: {
	url: '',
	type: 'ajax',
	extraParams: {
		'_method': 'get',
		'params[class]': 'comboData'
	}
},
reader: {
	root: 'data'
}


Часовой пояс GMT +3, время: 10:47.