EXTJS: Как очистить параметр «query» из хранилища данных после запроса автозаполнения в поле со списком - PullRequest
0 голосов
/ 03 ноября 2019

Проблемы: у меня есть комбинированный список с включенной функцией автозаполнения (minchars = 2), также установите forceSelection = true. После того, как я выполнил поиск в поле со списком, например, введя «abc» в поле со списком, в списке будут показаны только записи, содержащие строку «abc». Строка запроса, которую хранилище данных отправляет на сервер, содержит параметр: «query: abc». Каждый раз, когда я вызываю «combo.getStore.reload ()», параметры «query: abc» будут включены в запрос. Таким образом, когда я вызываю combo.setValue («def»), это не будет иметь никакого эффекта, потому что хранилище данных комбинированного списка теперь содержит только запись, в которой есть «abc». Я попытался очистить параметры «запроса» из хранилища данных, вызвав: delete combo.lastQuery или удалить дополнительные параметры из прокси, удалить фильтры из хранилища, ни один из них не сработал.

Тестовый код здесь: воспроизведениешаги:

  1. настроить хранилище данных для запроса удаленного сервера, сервер вернет
    • abc
    • abc1
    • def
    • ghi
    • jkl
    • ...
  2. установите значение комбо на «def», используя «кнопку установки значения комбо» и «test_text»"текстовое поле, комбо-значение будет успешно установлено
  3. выполните поиск в поле со списком, введите" abc ", тогда запрос вернет только 2 записи:
    • abc
    • abc1
  4. выберите любого из них
  5. повторите шаг 2, чтобы установить для комбинированного значения значение "def", значение не будет установлено, поскольку хранилище данных несодержит «def».

Вопрос: как удалить параметр «запрос» для восстановления хранилища данных, чтобы оно запрашивало все значения?

        {
            fieldLabel: 'Test Text',
            name: 'test_text',
            xtype: 'textfield',
            allowBlank: true
        },
        {
            xtype: 'button',
            text: 'set combo value',
            handler: function () {
                var text_field = this.up('form').down('textfield[name=test_text]');
                var combo_test = this.up('form').down('combo[name=test_combo]');
                combo_test.setValue(text_field.getValue());
            }
        },
        {
            xtype: 'button',
            text: 'reload store',
            handler: function () {
                var combo_test = this.up('form').down('combo[name=test_combo]');
                delete combo_test.lastQuery;
                combo_test.getStore().reload();
            }
        },
        {
            fieldLabel: 'Test Combo',
            name: "test_combo",
            xtype: 'combo',
            forceSelection: true,
            minChars: 2,
            allowBlank: false,
            store: Ext.create('Ext.data.Store', {
                proxy: {
                    type: 'ajax',
                    url: pcia.Globals.backendURL('/counterparty/broker/list_physical'),
                    reader: {
                        type: 'json',
                        rootProperty: 'records',
                        totalProperty: 'count'
                    }
                }
            }),
            displayField: 'name',
            valueField: 'name',
        }

1 Ответ

1 голос
/ 05 ноября 2019

Попробуйте

combo_test.getStore().reload({params:{}});
...