extjs如何确定用户是否触发了组合框更改事件

时间:2019-04-30 14:27:55

标签: extjs

我正在尝试Extjs,并且正在尝试这种情况:我有一个组合框,它将默认显示层次结构中的第一级。也就是说:

0001
0001.0002
0001.0002.0004
0001.0003
0005

第一级为00010005。如果我选择0001,它将进入restapi并获取0001.00020001.0003。该行为正在按预期方式工作。我的问题是:我必须在相同的组合框中显示获取的数据,并保持选择我首先选择的项目。我的组合正在做的是加载数据,但不选择所有内容。这是我到目前为止所做的:

var store = Ext.create('mycomponents.store.mystore', {});
var selectedText = '';
var autoSelec = false;

Ext.define('mycomponents.view.myview', {
    extend: 'Ext.container.Container',
    id: 'myview',
    alias: 'widget.newComponent',
    xtype: 'myview',
    items: [
        {
            xtype: 'combobox',
            reference: 'levels',
            publishes: 'value',
            fieldLabel: 'Options',
            displayField: 'val',
            valueField: 'val',
            queryMode: 'local',
            lastQuery: '',
            emptyText: 'Please select...',
            anyMatch: true,
            anchor: '-15',
            store: store,
            minChars: 0,
            typeAhead: true,
            triggerAction: 'all',
            selectOnFocus:true,
            typeAheadDelay: 100,
            labelWidth: 100,
            labelAlign: 'right',
            width: 265,
            pageSize: 0,
            clearFilterOnBlur: true,
            defaultValue: 0,
            matchFieldWidth: false,
            allowBlank: false,
            forceSelection: true,
            enableKeyEvents: true,
            onTrigger2Click: function (args) {
                this.select(this.getStore().getAt(0));
            },
            listeners: {
                select: function (combo, record, eOpts) {
                    console.log('Select', combo, record, eOpts);
                },

                change: function (item, newValue, oldValue) {
                    if (!autoSelec && newValue !== oldValue && !store.isLoading() && item.selection) {
                        if (newValue) {
                            selectedText = newValue;
                        }

                        store.proxy.extraParams = {
                            sort: 'clave',
                            'filter[activo]': true,
                            'filter[idpadre]': item.selection.data.idelemento
                        };

                        store.load({
                            callback: function () {
                                var items = store.data.items;

                                if (items.length) {
                                    console.log('MY STORE >>>', items);
                                }

                                autoSelec = true;
                            }
                        });
                    }
                }
            }
        }
    ],

    initComponent: function () {
        this.callParent(arguments);
        var that = this;
    }
});

如何在商店加载后将先前选择的项目设置为选择项目,从而不允许重新加载商店?

1 个答案:

答案 0 :(得分:0)

经过一整天的搜索和阅读,我找到了解决方案。也许这听起来很幼稚,但我是从Extjs开始的。

这是解决方案:

var items = store.data.items;
store.insert(0, mypreviousElement);
item.setValue(items[0]);
item.focus();

从这里开始,item是我的组合...这是store.load之后的回调,希望对您有所帮助。