Загрузка элементов для поля со списком заранее с помощью EXTjs - PullRequest
3 голосов
/ 05 июля 2011

У меня есть элементы для списка со списком, загружаемого из магазина, но что происходит, когда список элементов списка со списком должен отображаться, потому что пользователь нажал «развернуть», он должен «перезагрузить» данные из магазина прокси. Это заставляет список мигать и становится невыбранным, заставляя пользователя щелкнуть раскрывающийся список в другой раз.

Шаг 1 (при загрузке страницы):

Page is loaded, combo not visible, but firebug shows priorities is already loaded

Нажмите на ячейку, чтобы отредактировать ее:

cell is clicked to edit, combo box now visible, firebug shows no changes

Нажав на стрелку вниз в выпадающем списке. Опять же, этот ajax-вызов принудительно закрывает комбинированный список, заставляя пользователя повторно щелкнуть стрелку вниз.

down arrow on dropdown clicked, firebug shows another ajax call was made.

View

Ext.define('AM.view.card.BacklogList', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.backlogcardlist',

    title: 'Backlog',
    store: 'BacklogCards',

    selType: 'cellmodel',
    plugins: [
        Ext.create('Ext.grid.plugin.CellEditing', {
            clicksToEdit: 1
        })
    ],

    columns: [
        { header: 'ID', dataIndex: 'id' },
        { header: 'Name', dataIndex: 'name', field: 'textfield' },
        {
            header: 'Priority',
            dataIndex: 'priority_id',
            renderer: function(value){
                if (value==3)
                {
                    return "L";
                }
                else if (value==2)
                {
                    return "M";
                }
                else
                {
                    return "H";
                }
            },
            width: 130,
            field: {
                xtype: 'combobox',
                typeAhead: true,
                store: 'Priorities',
                displayField: 'name',
                valueField: 'id',
                listClass: 'x-combo-list-small'
            }
        }
    ]

});

Магазин:

Ext.define('AM.store.Priorities', {
    extend: 'Ext.data.Store',
    model: 'AM.model.Priority',
    autoLoad: true,

    proxy: {
        type: 'ajax',
        api: {
            read: 'app/data/priorities.json',
            update: 'app/data/updateUsers.json'
        },
        reader: {
            type: 'json',
            root: 'priorities',
            successProperty: 'success'
        }
    }
});

priorities.json

{
    success: true,
    priorities: [
        {
            id              : 1, 
            name            : "High",
            short_name      : "H"
        },
        {
            id              : 2, 
            name            : "Medium",
            short_name      : "M"
        },
            {
            id              : 3, 
            name            : "Low",
            short_name      : "L"
        }
    ]
}

1 Ответ

8 голосов
/ 06 июля 2011

Я считаю, что вам нужно установить queryMode: "local" в поле конфигурации поля со списком.

field: {  
xtype: 'combobox',  
queryMode: 'local',  
typeAhead: true,  
store: 'Priorities',  
displayField: 'name',  
valueField: 'id',  
listClass: 'x-combo-list-small'
}

Из документации API Ext JS Combobox (выделение добавлено) :

В queryMode: 'remote' ComboBox загружает свое хранилище динамически на основепри взаимодействии с пользователем.Обычно это используется для ввода типа «автозаполнение», и после того, как пользователь заканчивает ввод, хранилище загружается .

У вас в автозагрузке магазина установлено значение true, что означает, что у вас не должно быть проблем с локальным запросом, так как ваши данные уже должны быть в хранилище при создании.Я скажу, что я недостаточно копался, чтобы объяснить поведение, может быть, кто-то еще может разработать тонкости комбинированного списка.

...