В Flex 3 раньше можно было связать свойство компонента внутри itemRenderer через outerDocument. Так, например, если бы внутри itemRenderer было изображение, которое отображалось только при заданном условии родителя, что-то вроде этого отлично бы работало:
<mx:itemRenderer>
<mx:Component>
<mx:Label text="{data}"/>
<mx:Image id="img" visible="{outerDocument.ShowImage}" includeInLayout="{outerDocument.ShowImage}"/>
</mx:Component>
</mx:itemRenderer>
где внешний документ (не список, а mxml, в котором находится список) содержал что-то вроде
[Bindable]
public function get ShowImage():void
{
return showImage;
}
public function set ShowImage(val:Boolean):void
{
showImage = val;
}
Я пытался сделать то же самое в Flex 4.5, используя средства визуализации элементов Spark, используя parentDocument, но, похоже, он не знает о привязке. Когда я делаю это во Flex 4.5, itemRenderer, кажется, не знает, когда изменяется parentDocument ShowImage.
Кто-нибудь видел эту проблему и может предложить решение?
РЕДАКТИРОВАТЬ: Добавить источник искры
Как и было запрошено, мой источник искры:
MyItemRenderer.mxml
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<s:Label id="myLabel" text="{data}/>
<s:Image src="something.png" visible="{parentDocument.ShowImage}" includeInLayout="{parentDocument.ShowImage}"/>
</s:ItemRenderer>
RendererContainer.mxml
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
private var showImage:Boolean = false;
[Bindable]
public function set ShowImage(val:Boolean):void
{
showImage = val;
}
public function get ShowImage():Boolean
{
return showImage;
}
]]>
</fx:Script>
<!-- Content Group -->
<s:List id="lstCell" width="100%" height="100%" itemRenderer="MyItemRenderer">
</s:List>
</s:Panel>
Хорошо, поэтому в оболочке за пределами RendererContainer.mxml есть флажок, который отправляет пользовательское событие, которое обрабатывается путем изменения Bindable Boolean. Изменение в этой переменной затем изменяет свойство ShowImage в моем компоненте RendererContainer. Я ожидал бы, что привязка будет тогда подхвачена MyItemRenderer, но, похоже, она не работает.
Так что моя внешняя оболочка будет обращаться к ShowImage, как это
<comp:RendererContainer id="myId" ShowImage="{myCheckbox.selected}"/>