Обратите внимание на программу Flex ниже (я использую Flex Builder 3 с 3,5 SDK). Второй выпадающий список условен для первого. Если выбрано «имя», вы можете выбрать «фамилию». Если выбрано «none», вам не разрешено выбирать фамилию, а вам предлагается выбрать имя.
Чтобы увидеть таинственную проблему исчезающих ярлыков, запустите эту программу и выберите имя. Затем выберите фамилию. Все хорошо. Затем выберите «нет» в первом поле со списком. Приглашение второго комбинированного списка изменяется обратно, а фамилии удаляются. Все еще хорошо. Затем попробуйте выбрать имя и фамилию еще раз. Вы увидите, что после выбора имени фамилии не появляются, хотя пробелы для них появляются (и если вы отлаживаете программу, в поставщике данных появляются правильные данные).
Эта «ошибка» убивала меня изнутри весь день. Проект, в котором я реализую это поведение, немного сложнее, но этот пример в основном иллюстрирует происходящее. Это ошибка во Flex или я что-то не так делаю?
Спасибо!
<?xml version="1.0" encoding="utf-8"?>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var cbCompanyDP:ArrayCollection = new ArrayCollection( [ { firstName: "None", data: 0 },
{ firstName: "Bob", data: 1 },
{ firstName: "Bart", data: 2 } ] );
[Bindable]
public var cbEmployeeDP:ArrayCollection = new ArrayCollection();
public var employees:ArrayCollection = new ArrayCollection( [ { lastName: "Smith" },
{ lastName: "Smyth" },
{ lastName: "Smick" },
{ lastName: "Smack" } ] );
[Bindable]
public var prompt:String = "Choose First Name first";
public function cbFirstNameChange( value:int ):void
{
if ( value == 0 )
{
employees.removeAll();
setEmpDP( employees );
prompt = "Choose First Name first";
}
else
{
setEmployees();
setEmpDP( employees );
prompt = "Now choose Last Name";
}
}
private function setEmpDP( ac:ArrayCollection ):void
{
cbEmployeeDP = ac;
}
private function setEmployees():void
{
employees = new ArrayCollection( [ { lastName: "Smith" },
{ lastName: "Smyth" },
{ lastName: "Smick" },
{ lastName: "Smack" } ] );
}
]]>
</mx:Script>
<mx:HBox>
<mx:ComboBox dataProvider="{cbCompanyDP}"
id="cbFirstName"
labelField="firstName"
width="200"
change="cbFirstNameChange(cbFirstName.selectedItem.data)"
prompt="Choose a first Name" />
<mx:ComboBox dataProvider="{cbEmployeeDP}"
id="cbLastName"
labelField="lastName"
width="200"
prompt="{prompt}" />
</mx:HBox>