ComboBox в PropertyGrid - PullRequest
       20

ComboBox в PropertyGrid

0 голосов
/ 07 ноября 2018

У меня есть какой-то магазин, в котором формируются данные. На панели это выглядит как «fieldName» и текстовое поле (в зависимости от вызванной формы).

Например, на одной форме отображается «название документа» и поле, на другой - дата продажи и поле даты. Данные формируются динамически.

Вот магазин:

tableTempStore = new Ext.data.JsonStore({
        url: objectUrlAddress,
        baseParams: {
            'objectID' : objectID
        },
        root: 'Fields',
        fields: [
            {name: 'Hint'},
            {name:'Type', type: 'int'},
            {name: 'Value'},
            {name: 'Index', type: 'int'},
            {name: 'IsRequired', type:'bool'},
            {name: 'Identifier'},
            {name: 'EnumList'},
            {name: 'Directory'},
            {name: 'Data'}
        ],
        listeners: {
            load: function(obj, records) {
                Ext.each(records, function(rec) {
                    var item = null;
                    switch (rec.get('Type')) {
                    case 0: // целое
                            item = new Ext.form.NumberField();
                            item.id = rec.get('Identifier');
                            item.fieldLabel = rec.get('Hint');
                            var isRequired = rec.get('IsRequired');
                            item.anchor = '100%';
                            item.allowBlank = ! isRequired;
                            item.disabled = editDisabled;
                            item.value = rec.get('Data');
                            break;
                        case 1: // вещественное
                            item = new Ext.form.NumberField();
                            item.id = rec.get('Identifier');
                            item.fieldLabel = rec.get('Hint');
                            var isRequired = rec.get('IsRequired');
                            item.anchor = '100%';
                            item.allowBlank = ! isRequired;
                            item.allowDecimals = true;
                            item.disabled = editDisabled;
                            item.value = rec.get('Data');
                            break;
case 5: // SQL-справочник
                            var dataValues = Ext.util.JSON.decode(rec.get('EnumList'));
                            var dataArray = Object.keys(dataValues).map(function(k) { return [k, dataValues[k]] });
                            item = new Ext.form.ComboBox({
                                typeAhead: true,
                                width: '100%',
                                triggerAction: 'all',
                                forceSelection:true,
                                editable: false,
                                hiddenName: rec.get('Identifier'),
                                mode: 'local',
                                store: new Ext.data.ArrayStore({
                                    fields: [
                                        {name: 'myId', type: 'string'},
                                        {name: 'displayText'}
                                    ],
                                    data: dataArray
                                }),
                                valueField: 'myId',
                                displayField: 'displayText',
                                disabled: editDisabled
                            });
                            item.id = '_' + rec.get('Identifier');
                            item.anchor = '100%';
                            item.fieldLabel = rec.get('Hint');
                            var isRequired = rec.get('IsRequired');
                            item.allowBlank = ! isRequired;
                            item.value = rec.get('Data');
                            break;
                            }
                        if (item != null) {
                        templateGrids.add(item);
                        columnsTable = item.__proto__.constructor.xtype;
                        var s = null;
else if (rec.get('Type') == 4)
                        {
                            var dataValues = Ext.util.JSON.decode(rec.get('EnumList'));
                            var dataArray = Object.keys(dataValues).map(function(k) { return [k, dataValues[k]] });
                            s = new Ext.grid.GridEditor(new Ext.form.ComboBox({
                                id: item.id, 
                                allowBlank: item.allowBlank, 
                                typeAhead: true,
                                lazyRender: true,
                                triggerAction: 'all',
                                forceSelection:true,
                                queryMode: 'local',
                                editable: false,
                                value: item.value,
                                hiddenName: rec.get('Identifier'),
                                mode: 'local',
                                store: new Ext.data.ArrayStore({
                                    fields: [
                                        {name: 'myId', type: 'string'},
                                        {name: 'displayText', type: 'string'}
                                    ],
                                    data: dataArray
                                }),
                                valueField: "myId",
                                displayField: "displayText",
                                disabled: editDisabled
                            }));
                        }
                            source[item.fieldLabel] = '';
                            grid.customEditors[item.fieldLabel] = s;
                            grid.setSource(source);
                       };
                });
            }
        }
    });

Вот таблица свойств

grid = new Ext.grid.PropertyGrid({
        title: 'Заполнение шаблона',
        url: objectUrlAddress,
        id: 'propGrid',
        autoFill: true,
        autoHeight: true,
        width: 200,
        store: tableTempStore,
        width: 600,
        style: 'margin:0 auto;margin-top:10px;'
        });

Проблема со списком. Он показывает itemValue вместо fieldValue в ячейке, и я не знаю, как решить эту проблему. Как я могу сделать? Спасибо за продвижение.

...