Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   combobox в grid'е (https://javascript.ru/forum/extjs/37318-combobox-v-grid%27e.html)

skrudjmakdak 15.04.2013 15:57

combobox в grid'е
 
есть грид. получаю фокус combobox'са и вместо значения (name) у меня показывает айдишник. после того как выберу элемент из списка, то дальше работает нормально. как при получения фокуса выводил сразу (name) а не id
var store_combo;
var store;
Ext.onReady(function(){
//-------------------
var getStore = function(URL, FIELDS)
    {
    return Ext.create('Ext.data.Store',
	{
	fields: FIELDS,
	idProperty: 'id',
	proxy:
	    {
	    type: 'ajax',
	    url: URL,
	    actionMethods:
		{
		read: 'POST'
		},
	    reader:
		{
		root: 'data',
		totalProperty: 'totalCount'
		}
	    },
	autoLoad: true
	});
    }
//-------------------

store_combo = getStore(
    'get/statuswork', 
    ['id', 'name']);
    
store = getStore(
    'get/work?project_id=3', 
    ['id', 'name', 'status_id']);

//-------------------
Ext.create('Ext.panel.Panel',
    {
    items: [
	{
	xtype: 'grid',
	store: store,
	columns: [
	    {
	    text: 'column',
	    dataIndex: 'status_id',
	    renderer: function(id)
		{
		var index = store_combo.find("id", id);
		return (index == -1) ? '' : store_combo.getAt(store_combo.find("id", id)).get('name');
		},
	    editor: Ext.create('Ext.form.field.ComboBox',
		{
		store: store_combo,
		hideLabel: true,
		queryMode: 'local',
		displayField: 'name',
		valueField: 'id'
		})
	    }],
	plugins: [Ext.create('Ext.grid.plugin.CellEditing', {clicksToEdit: 1})]
	}],
    renderTo: Ext.getBody()
    });
//-------------------
});

skrudjmakdak 15.04.2013 17:26

кое что нарыл. беда в самих сторах. если данные хранятся в 'data' то все норм работает
вот пример сторы:
Ext.create('Ext.data.Store',
    {
    fields:['status_id'],
    data:[
        {"status_id": 2},
        {"status_id": 1},
        {"status_id": 2},
        {"status_id": 3}],
    proxy:
        {
        type: 'memory',
        reader:
            {
            type: 'json'
            }
        }
});

но мне данные нужно из бд тянуть, а не чтобы локально хранились..

skrudjmakdak 16.04.2013 10:42

задача решилась.. id статуса в сторах была типа string а не int
вот к примеру:
Ext.create('Ext.form.field.ComboBox',
        {
        store: store_combo,
        hideLabel: true,
        queryMode: 'local',
        displayField: 'name',
        valueField: 'id',
        listeners:
                {
                focus:
                        {
                        fn: function()
                                {
                                console.log(typeof this.getValue());
                                }
                        }
                }
        }


при фокусе в консоль выдаст String, нужен int


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