Как ограничить выбор значений из 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 Спасибо |
Раз вы создаете айтемы в ините то проблем вообще нет. Создайте свой стор и заполните его тремя строками из Statuses. Передайте его в конфиг.
|
Спасибо.
В целом, решение выглядит так:
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);
}
}
});
}
});
|
| Часовой пояс GMT +3, время: 06:46. |