Поле ввода не очищается после выбора значения в поле тега Ext JS - PullRequest
0 голосов
/ 17 января 2020

У меня есть поле тега Ext JS с anyMatch = true. Теперь, если вы наберете AB , он покажет результат, и как только вы выберете выбор, он очистит введенный вами ввод, т.е. AB Теперь, когда у вас есть anyMatch = true, в этот раз, если я наберу HI он покажет вам результат, но когда вы выбираете значение, поле ввода не очищается. Я видел код поля тега Ext JS, он обрабатывается явно в методе clearInput . Я хотел знать, почему это реализовано таким образом? Ниже приведен пример кода

    Ext.create('Ext.form.Panel', {
    title: 'Tag Field Example',
    width: 1000,
    bodyPadding: 10,

    items: [{
        xtype: 'fieldcontainer',
        labelWidth: 100,
        layout: 'hbox',
        items: [{
            xtype: 'fieldcontainer',
            defaults: {
                flex: 1,
            },
            layout: 'hbox',
            items: [{

                xtype: 'tagfield',
                minChars: 1,
                anyMatch: true,
                allowBlank: true,
                margin: '5 5 5 5',
                fieldLabel: 'Tag Field 1',
                name: 'tagField1',
                store: ['ABC D', 'EFG HI', 'C'],
                queryMode: 'local',
                filterPickList: true,
                emptyText: 'Multi Select...'
            }]
        }]
    }],
    renderTo: Ext.getBody()
});

1 Ответ

2 голосов
/ 17 января 2020

Это похоже на ошибку. Если вы посмотрите на метод clearInput из определения класса тегов и, в частности, на раздел с ранним возвратом:

if (!Ext.String.startsWith(lastDisplayValue, inputValue, true)) {
    return;
}

Вы можете увидеть, что они отбрасывают очистку поле, если последнее выбранное значение поля тега не начинается с введенного значения ввода («ab c d» начинается с «ab», поэтому поле очищается; «efg hi» не начинается с «hi» - поэтому очистка отбрасывается).

Это явно не будет работать, если у вас включена конфигурация anyMatch .

Раздел раннего возврата сверху, должен выглядеть примерно так:

if (!me.anyMatch) {
    if (!Ext.String.startsWith(lastDisplayValue, inputValue, true)) {
        return;
    }
} else {
    if (lastDisplayValue.toLowerCase().indexOf(inputValue.toLowerCase()) === -1) {
        return;
    }
}

Мы сохраняем первоначальную проверку, когда anyMatch не активирован, в противном случае мы проверяем, включены ли введенные значения в последнее выбранное значение поля тега.

Вот скрипка с предложенным переопределением: https://fiddle.sencha.com/#view / editor & fiddle / 32q0

...