Tengo un combo como el siguiente.

Ext.create('Ext.form.ComboBox', {
            fieldLabel: 'Label',
            allowBlank: true,
            maxLength: 50,
            minChars: 10000,
            name: 'txt',
            id: 'txt',
            store: states,
            displayField: 'name',
            selectOnFocus: false,
            forceSelection: false,
            typeAhead: false,
            autoSelect: false,
            queryMode: 'local',
            triggerAction: 'all',
            hideTrigger: true,
            listeners: {
                beforequery: function (record) {
                    record.query = new RegExp(record.query, 'i');
                    record.forceAll = false;
                },
                specialkey: function (f, e) {
                    if (e.getKey() == e.ENTER) {
                        doProcess();
                    }
                }
            },
            renderTo: Ext.getBody()
        });

Mi propósito es proporcionar un cuadro de texto que recuerde la historia. He buscado y encontrado esta solución: debe usar un combo como textfield. No hay problema hasta ahora. Pero cuando escribo algo y selecciono el registro de la lista que buscó antes, la próxima vez que combo lo selecciona automáticamente mientras escribo. No estoy seguro si lo expliqué.

Puede probarlo aquí: https://fiddle.sencha.com/#view/editor&fiddle/ 28tl

Saludos.

0
Muzaffer GALATA 27 oct. 2017 a las 09:19

3 respuestas

La mejor respuesta

Hola, he resuelto mi problema como a continuación.

https://fiddle.sencha.com/#view/editor&fiddle/28tl

Este ejemplo me dice más claro que mi pregunta.

Ext.application({
    name: 'Fiddle',

    launch: function () {
        // The data store containing the list of states
        var states = Ext.create('Ext.data.Store', {
            fields: ['abbr', 'name'],
            data: [{
                "abbr": "AL",
                "name": "Alabama"
            }, {
                "abbr": "AK",
                "name": "Alaska"
            }, {
                "abbr": "AZ",
                "name": "Arizona"
            }]
        });

        // Create the combo box, attached to the states data store
        Ext.create('Ext.form.ComboBox', {
            fieldLabel: 'Label',
            allowBlank: true,
            maxLength: 50,
            minChars: 10000,
            name: 'txt',
            id: 'txt',
            store: states,
            displayField: 'name',
            selectOnFocus: false,
            forceSelection: false,
            typeAhead: false,
            autoSelect: false,
            queryMode: 'local',
            triggerAction: 'all',
            hideTrigger: true,
            enableKeyEvents: true

            ,
            listConfig: {
                listeners: {
                    itemclick: function (list, record) {
                        _iseFareIleSecildi = true;
                    },
                    highlightitem: function (view, node, eOpts) {
                        _iseKlavyeIleSecildi = true;
                    }
                }
            },
            listeners: {
                beforequery: function (record) {
                    record.query = new RegExp(record.query, 'i');
                    record.forceAll = false;
                    Ext.defer(function () {
                        secimiSifirla();
                    }, 30);
                },
                specialkey: function (f, e) {
                    if (e.getKey() == e.ENTER) {
                        console.log('action');
                    }
                },
                keyup: function (combo, e) {
                    if (e.getKey() == e.ENTER) {
                        console.log('action');
                    }
                },
                beforeselect: function (combo, record, index, eOpts) {
                    if (_iseFareIleSecildi) {
                        secimiSifirla();
                        return true;
                    } else {
                        if (_iseKlavyeIleSecildi) {
                            secimiSifirla();
                            return true;
                        } else {
                            return false;
                        }
                    }
                }
            },
            renderTo: Ext.getBody()
        });
    }

});

var _iseFareIleSecildi = false;
var _iseKlavyeIleSecildi = false;

function secimiSifirla() {
    _iseFareIleSecildi = false;
    _iseKlavyeIleSecildi = false;
}

Saludos.

0
Muzaffer Galata 8 nov. 2017 a las 08:16

Puede configurar trackOver configuración de la lista límite a false así:

xtype: 'combo',
...
listConfig: {
    trackOver: false
}

Violín: https://fiddle.sencha.com/#view/editor&fiddle/2945

0
scebotari66 31 oct. 2017 a las 14:25

Prueba con "tagfield". Marque aquí

0
Harshal Desai 1 nov. 2017 a las 17:57