Spark.Components.List с переменным содержимым: Flex 4, AS3
Я написал следующее во Flex 4/AS3, и это не сработало так, как ожидалось.
Итак, я хотел бы знать, если что-то не так с моим кодом... Я объясню это:
TileTest.mxml
<s:Application minWidth="955" minHeight="600" creationComplete="createButtons()"
<fx:Script>
<![CDATA[
import Object.TestButton;
import mx.collections.ArrayList;
private var _names:Array = ["one", "two", "three"];
public function createButtons():void
{
var buttons:ArrayList = new ArrayList();
for(var a:int = 0; a < _names.length; a++)
{
var testButton:TestButton = new TestButton();
testButton.customName = _names[a];
buttons.addItem(testButton);
}
myList.dataProvider = buttons;
}
]]>
</fx:Script>
<s:VGroup gap="12" width="100%">
<s:Label text="Options" fontSize="18" fontWeight="bold" color="#333333" />
<s:List width="100%" height="100%" id="myList" itemRenderer="Object.TestButton" borderVisible="false">
<s:layout>
<s:TileLayout orientation="rows" columnWidth="290" rowHeight="90" columnAlign="left" horizontalGap="0" verticalGap="0" />
</s:layout>
</s:List>
</s:VGroup>
</s:Application>
Это мое заявление. Здесь у меня есть список myList, в который я загружаю несколько TestButton. Я установил имя для каждой кнопки внутри цикла.
TestButton
<s:Group width="300" height="90" click="{ Alert.show(_name); }"
<fx:Script>
<![CDATA[
import mx.controls.Alert;
private var _name:String = "just a test...";
public function set customName(newName:String):void
{
_name = newName;
Alert.show(_name);
this.addEventListener(MouseEvent.MOUSE_OVER, function():void{ Alert.show(_name); });
}
]]>
</fx:Script>
<s:BorderContainer accentColor="#000000" width="100%" height="100%" />
</s:Group>
Как видите, у меня есть три оповещения в этом компоненте... Я сделал так, чтобы мы могли понять проблему.
Первое предупреждение возникает, когда я задаю customName, которое происходит в приложении, как уже показано.
Второй должен произойти в Mouse_Over, так как прослушиватель событий был добавлен в элемент Group.
И третье предупреждение должно появиться при щелчке в элементе группы.
Теперь, если я запускаю полученный SWF, я вижу все три кнопки на экране и три оповещения, по одному для каждого набора customName в Приложении, и оно предупреждает правильное имя.
Если я наведу мышку на любую кнопку, она не предупредит ни одного сообщения.
Если я нажимаю любую кнопку, она предупреждает сообщение по умолчанию со свойством _name, которое является "просто тестом..."
Я не могу понять, в чем проблема, так как я ожидал, что она всегда предупредит имя, установленное Приложением для каждой кнопки. Кроме того, я не хочу менять компоненты... я хочу сказать, что я хотел бы иметь List и TestButtons с частной строкой внутри.
Если проблема в этих конкретных реализациях, то у меня не будет другого пути, кроме как изменить его...
Спасибо вам всем!
1 ответ
Проблема в том, что у вас есть список TestButton
в вашем поставщике данных, а не просто данные. Эти кнопки создаются, и поэтому вы видите правильные оповещения.
Итак, Flex видит список из трех элементов и, следовательно, создает три дополнительных TestButtons
представить данные в вашем списке. Но те TestButtons
являются совершенно новыми, со значениями по умолчанию для его свойств.
Чтобы это исправить, было бы лучше, если бы у вас были данные только в вашем поставщике данных ArrayList, и вы могли бы получить к ним доступ через data
собственность вашего элемента рендерера.