Элементы списка фильтров Extjs6 Sort Grid

У меня есть фильтр списка для одного из столбцов моей сетки. Когда я открываю фильтр, список не отсортирован.

Я пробовал прикрепить магазин к этому фильтру и отсортировать магазин. Хотя магазин отсортирован, фильтр показывает несортированные товары.

Это моя модель просмотра:

Ext.define('MyApp.view.myview.TestGridModel', {    
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.test-grid',

    stores: {
        test: {
            type: 'test'
        },
        business: {
            source: '{test}',
            sorters: {
                property: 'business',
                direction: 'ASC'
            }
        },
        other:{
            type: 'other'
        }
    }
});

Ниже приведен фрагмент с моей точки зрения, где я настраиваю хранилище для фильтра:

bind: {       
    store: '{test}'
},

plugins: 'gridfilters',

columns: [{
    text: 'Id',
    dataIndex: 'id'
}, {
    text: 'Business',
    dataIndex: 'business',
    flex: 2,
    filter: {
        type: 'list',
        store: '{business}'
        //store: '{other}'
    }
}, {
    text: 'Profile',
    dataIndex: 'profile',
    flex: 2
}, {
    text: 'Program',
    dataIndex: 'program',

Я также создал скрипку. Обратите внимание, что мне нужен магазин, а не конфиг.

Как отсортировать фильтр сетки?

Спасибо


person florin    schedule 02.06.2017    source источник
comment
Причина, по которой у вас возникла проблема, заключается в том, что в настоящее время вы не можете привязать данные к хранилищам для фильтров. Вам нужно будет напрямую передать конфигурацию магазина (или экземпляр).   -  person Evan Trimboli    schedule 02.06.2017
comment
@EvanTrimboli Я не понимаю, что такое конфигурация магазина. В представлении я попытался установить бизнес-магазин (без привязки) (пример: магазин: «бизнес»), но с тем же эффектом. Не могли бы вы дать мне более подробную информацию?   -  person florin    schedule 02.06.2017
comment
@EvanTrimboli Я пробовал с конфигурацией магазина [магазин: {тип: 'тест', сортировщики: {свойство: 'бизнес', направление: 'ASC'} }], но теперь фильтр ничего не показывает скрипка   -  person florin    schedule 02.06.2017


Ответы (3)


Как упоминалось @EvanTrimboli, вы пока не можете указать привязку хранилища для фильтров, вам нужна конфигурация хранилища или пример. Скрипка из вашего вопроса работает, потому что, поскольку фильтр не находит допустимую конфигурацию хранилища, он генерирует ее сам. После этого вы пытались добавить конфигурацию магазина:

store: {
    type: 'test',
    sorters: {
        property: 'business',
        direction: 'ASC'
    }
}

Это должно работать, но вы забыли указать ссылку idField и labelField настройки фильтра. Вот рабочая скрипта с указанными исправлениями: https://fiddle.sencha.com/#fiddle/20rv&view/editor.

Но мне такой подход не очень нравится, т.к. нужно заново загрузить данные для тестового хранилища, способ с цепным хранилищем здесь кажется более подходящим. Для этого вам нужно будет объявить свой магазин в модели представления следующим образом:

stores: {
    test: {
        type: 'test',
        storeId: 'test'
    },
    business: {
        source: 'test',
        sorters: {
            property: 'business',
            direction: 'ASC'
        }
    }
}

Затем переместите инициализацию столбцов в метод initComponent, чтобы хранилища из модели представления были готовы, затем укажите следующую конфигурацию для вашего фильтра:

filter: {
    type: 'list',
    idField: 'business',
    labelField: 'business',
    store: this.getViewModel().getStore('business')
}

Вот рабочая скрипта для этого подхода: https://fiddle.sencha.com/#fiddle/20s0&view/editor.

person scebotari66    schedule 03.06.2017
comment
этот подход можно использовать, если фильтр из столбца B зависит от значений из фильтра из столбца A? - person florin; 16.06.2017
comment
Мне это кажется достижимым.. Вы можете задать другой вопрос, более подробно описав свой сценарий, если вам трудно понять это. - person scebotari66; 16.06.2017
comment
Я добавил еще один вопрос, как вы предложили (ссылка) - person florin; 25.10.2017

Вы должны использовать сортировщик в вашем магазине. В TestStore.js добавьте это после прокси:

sorters: ['business']

проверьте документ extjs Сортировка и фильтрация

person Edwin    schedule 02.06.2017

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

Ext.define('MyApp.view.myview.TestGridModel', {
    extend: 'Ext.app.ViewModel',

    alias: 'viewmodel.test-grid',

    stores: {
        test: {
            type: 'test',
            sorters: [{
                property: 'business',
                direction: 'ASC'
            }]
        },
        business: {
            source: '{test}',
            sorters: [{
                property: 'business',
                direction: 'ASC'
            }]
        },
        other:{
            type: 'other'
        }
    }
});
person Sudhakar    schedule 02.06.2017
comment
Если я сделаю так, как вы предложили, тестовый магазин будет отсортирован по бизнесу. Если я изменю сортировку, это приведет к изменению и фильтра. Это нежелательное поведение - person florin; 02.06.2017