Я создал пользовательский ComboCheck, который расширяет спарк DropDownList, который является DropDownList флажков. Внутри моего itemRenderer у меня есть код:
[Bindable]override public function set data (value:Object):void {
if (value!=null) {
_data = value;
item.label = value.label;
item.group = value.group;
item.toolTip = value.toolTip;
item.selected = value.selected;
item.enabled = value.enabled;
...
Этот код позволяет мне включать и отключать отдельные элементы в раскрывающемся списке, чтобы при его отображении вы не могли выбирать элементы, которые я отключил. Я пытаюсь создать функциональность, при которой пользователь нажимает на определенный элемент в данной категории, что приводит к отключению всех других категорий, пока вы не отмените выбор.
Моя проблема заключается в том, что, когда DropDownList работает, элементы уже были обработаны, поэтому изменение свойства enabled
для каждого элемента, который должен быть отключен, не изменяет элементы, которые уже были отображены. Если вы прокрутите вниз и вернетесь назад для повторного рендеринга данных, все будет хорошо.
Есть ли способ заставить itemRenderer повторно визуализировать данные на экране, чтобы он обновил и применил это обновление?
Ниже приведен пример кода выбранного элемента, он отключает все остальные элементы, а затем включает только тот, который вы выбрали. У меня также есть функция itemDeselect, которая уменьшает itemCount
и разрешает все
</p>
<pre><code>private function itemSelect(evt:Event):void{
itemCount++;
var myText:String = '';
var items:Vector.<Object> = allItems.selectedItems;
if(itemCount == 1){
for each(var obj:Object in allItems.dataProvider){
obj.enabled = false;
}
}
for (var i:String in items) {
if(items[i].group == "HU"){
items[i].enabled = true;
huList[items[i].label] = items[i].selected;
}else if(items[i].group == "ALL"){
items[i].enabled = true;
allCase = items[i].selected;
}else{
items[i].enabled = true;
otherList[items[i].label] = items[i].selected;
}
}
selectionChanged = true;
}
Это работает, но опять-таки не перерисовывается, поэтому obj.enabled=false
не появляется, если вы не прокрутите вниз и не вернетесь назад.
РЕДАКТИРОВАТЬ: окончательное решение
Используя третий вариант, предложенный www.Flextras.com, я использовал свойство itemUpdated dataProvider.itemUpdated (obj), поэтому внутри
</p>
<pre><code>for each(var obj:Object in allItems.dataProvider){
obj.enabled = false;
allItems.dataProvider.itemUpdated(obj);
}
Это также не приведет к сбросу выпадающего списка в scrollPosition 0