ExtJS 4 MVC ComboBox загрузка через Direct Store - как предотвратить загрузку при нажатии на поле со списком? - PullRequest
3 голосов
/ 28 ноября 2011

У меня есть поле со списком в виде, которое связано с хранилищем данных / моделью, которая использует Ext.Direct для загрузки данных для выпадающего списка.

В моем контроллере, где я открываю представление, содержащее выпадающий список, я запускаю загрузку магазина.

Это все работает, но когда я нажимаю на выпадающий список, он запускает другую загрузку (маскирует экран при загрузке) и перезагружает магазин. Мне нужно предотвратить эту вторую загрузку, так как она уже загружается.

Магазин:

Ext.define('ESDB.store.Employees', {
    extend: 'Ext.data.Store',
    model: 'ESDB.model.Employee',
    autoLoad:false,
    proxy: {
        type: 'direct',
        api: {
            create  : undefined,
            read    : EmployeeService.getRecords,
            update  : EmployeeService.setRecord,
            destroy : undefined
        }

    }
});

Модель:

Ext.define('ESDB.model.Employee', {
    extend: 'Ext.data.Model',
    fields: ['id','name','login','pw','domain','lastLogin','addedDate','active','ulevel','staffID']
});

Вид:

(соответствующая часть - поле со списком - в представлении нет других ссылок на магазин или модель)

this.items = [
                {
                xtype: 'form',
                items: [
{
                        xtype: 'combobox',
                        name : 'callTakenBy',
                        fieldLabel: 'Taken By',
                        displayField: 'name',
                        queryMode: 'remote',
                        valueField: 'id',
                        store: "Employees",
                        editable: false
                    }
]]}

Контроллер (когда они дважды щелкают строку в сетке, он загружает хранилище сотрудников, а затем открывает представление):

encounterRowClicked: function(grid, record) {
            console.log('Double clicked on ' + record.get('id'));

            var store = this.getEmployeesStore();
                store.load({
                    params: {
                    },
                    callback: function(r,options,success) {  } //callback
                }); //store.load


            // load the view:

            var view = Ext.widget('encounteredit');
            view.down('form').loadRecord(record);

        }

Весь этот код работает, но когда я попадаю в представление, где в выпадающем списке правильно отображается одно из загруженных значений, я нажимаю на выпадающий список, и он запускает другую загрузку магазина. Это работает, но затем я должен нажать еще раз, чтобы фактически выбрать другое значение. Поэтому я ищу способ сообщить списку задач просто использовать хранилище, а не загружать его - похоже, он уже должен знать, что он загружен, и просто использовать его?

1 Ответ

6 голосов
/ 29 ноября 2011

Вам необходимо установить queryMode : 'local' для выпадающего списка.Как вы можете видеть в документации, по умолчанию используется значение remote (кстати, вы должны удалить режим: 'remote', режим не является допустимой конфигурацией для выпадающего списка).

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

Вы должны использовать 'local', потому что у вас уже есть данные локально в хранилище

...