Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.09.2018, 22:58
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 47

Как ограничить выбор значений из combobox
Приветствую.
В окне создания и редактирования записей у меня есть поле типа combobox
Ext.define('BookApp.view.Book', {
    extend: 'Ext.window.Window',
    alias: 'widget.bookwindow',
    width   : 450,
    title: 'Book',
    layout: 'fit',
    autoShow: true,
    modal   : true,
    initComponent: function() {
        this.items = [{
                xtype: 'form',
                items: [               
                 {
                    xtype: 'combobox',
                    fieldLabel: 'Status',
                    name: 'status',
                    store: Ext.data.StoreManager.lookup('Statuses'),
                    valueField: 'id',
                    displayField: 'name',
                    typeAhead: true,
                    queryMode: 'remote'

                },
...............


Store Statuses отдает записи из таблицы с полями id, name, order_install , где order_install это порядок установки статуса.

table Statuses

id name order_install

23 New 1

24 In Work 2

29 Postponed 3

34 Shipped 4

31 In_transit 5

Как сделать что бы выбор значения из списка статусов был ограничен только на одно значение вверх или вниз согласно полю order_install?

Для примера: Если статус In Work , то доступные для выбора были только статусы Postponed и New

Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 11.09.2018, 11:27
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 273

Раз вы создаете айтемы в ините то проблем вообще нет. Создайте свой стор и заполните его тремя строками из Statuses. Передайте его в конфиг.
Ответить с цитированием
  #3 (permalink)  
Старый 11.09.2018, 14:05
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 47

Спасибо.
В целом, решение выглядит так:
Ext.application({
    name : 'Fiddle',

    launch : function() {
        var store = Ext.create('Ext.data.Store', {
            fields: ['order', 'id', 'name'],
            data : [
                {"id": 23, name: "New", order_install: 1},
                {"id": 24, name: "In Work", order_install: 2},
                {"id": 29, name: "Postponed", order_install: 3},
                {"id": 34, name: "Shipped", order_install: 4},
                {"id": 31, name: "In_transit", order_install: 5}
            ]
        });

        function filterCombo(combobox, index) {
            store = combobox.getStore();
            store.clearFilter();
            store.filterBy(
                function(record) {
                    if ((record.internalId == index - 1) || (record.internalId == index) || (record.internalId == index + 1)) {
                        return true;
                    } else {
                        return false;
                    }
                }
            );
        };

        Ext.create('Ext.form.field.ComboBox', {
            fieldLabel: 'Choose items',
            store: store,
            queryMode: 'local',
            displayField: 'name',
            valueField: 'id',
            value: '24', // Equals to "In Work"
            multiSelect: false,
            renderTo: Ext.getBody(),
            listeners: {
                'select': function (combo, records) {
                    index = records.internalId;
                    filterCombo(combo, index);
                },
                'render': function (combo) {
                    index = combo.getSelection().internalId;
                    filterCombo(combo, index);
                }
            }
        });     
    }
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вернуть несколько значений из рекурсивной функции? Tipylja Node.JS 1 27.08.2018 17:58
Как ограничить количество конкретного символа Vardges jQuery 5 20.09.2017 18:16
Как поправить выбор в select? makalet jQuery 2 02.08.2015 14:52
Как в ячейку грида всунуть combobox? kostiaGt ExtJS 1 29.10.2009 17:46
Как ограничить работу скрипта, чтобы он выполнялся локально? Netot Я не знаю javascript 5 04.06.2009 20:03