Что касается вашей второй проблемы, лучший способ, который я вижу, - это переопределить поле со списком onListSelectionChange
для фильтрации значений, которые вам не нужны:
onListSelectionChange: function(list, selectedRecords) {
//Add the following line
selectedRecords = Ext.Array.filter(selectedRecords, function(rec){
return rec.data.parent!=0;
});
//Original code unchanged from here
var me = this,
isMulti = me.multiSelect,
hasRecords = selectedRecords.length > 0;
// Only react to selection if it is not called from setValue, and if our list is
// expanded (ignores changes to the selection model triggered elsewhere)
if (!me.ignoreSelection && me.isExpanded) {
if (!isMulti) {
Ext.defer(me.collapse, 1, me);
}
/*
* Only set the value here if we're in multi selection mode or we have
* a selection. Otherwise setValue will be called with an empty value
* which will cause the change event to fire twice.
*/
if (isMulti || hasRecords) {
me.setValue(selectedRecords, false);
}
if (hasRecords) {
me.fireEvent('select', me, selectedRecords);
}
me.inputEl.focus();
}
},
И измените свой onBoundlistItemClick
, чтобы выбирать и отменять выбор только элементов в boundlist
, а не setValue
комбо:
onBoundlistItemClick: function(dataview, record, item, index, e, eOpts) {
var chk = item.className.toString().indexOf('x-boundlist-selected') == -1;
if ( ! record.data.parent) {
var d = dataview.dataSource.data.items;
for (var i in d) {
var s = d[i].data;
if (s.parent == record.data.id) {
if (chk) { // select
dataview.getSelectionModel().select(d[i],true);
} else { // deselect
dataview.getSelectionModel().deselect(d[i]);
}
}
}
}
},
Что касается вашей первой проблемы, легко добавить метку с помощью параметра конфигурации displayTpl. Но это добавит только нужный вам текст без какого-либо стиля (серый цвет и т. д.). Комбинация использует текстовый ввод, который не принимает теги html. Если вам не нужно, чтобы пользователь вводил текст, вы можете изменить базовое поведение комбо и использовать другой элемент вместо ввода текста.
person
Amit Aviv
schedule
08.06.2013