Перемещение по искре ItemRenderer переключает состояние просмотра по умолчанию! - PullRequest
2 голосов
/ 01 мая 2011

В настоящее время я использую Flex SDK 4.5 (но то же самое с 4.1), и у меня есть следующая проблема:

Я привязываю текущее состояние ItemRenderer к внешнему объекту. Этот объект вводится в представление mxml через инжектор Robotlegs.

представление имеет 4 состояния, все работает нормально, пока я не переверну сам элемент. В этом случае, без каких-либо явных объяснений, currentState переключается в состояние по умолчанию, даже если связанная переменная currentState не изменилась и является значением. Чтобы решить эту проблему (и доказать, что значение связанного состояния не изменилось), я слушаю добавленное событие кнопки, которое создается, когда состояние переключается на значение по умолчанию, и вынуждает currentState снова переключаться на текущее значение.

Это работает, но, очевидно, плохо, кто-нибудь может сказать мне, что происходит? Спасибо!

пожалуйста, посмотрите на следующий код:

<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"
 xmlns:modelviews="it.addme.MVVM.modelviews.*"
 width="150" height="100" autoDrawBackground="true"
 currentState="{modelView.currentState}"
 >

 <fx:Script>
 <![CDATA[
 import it.addme.MVVM.modelviews.AddMeButtonPresenter;

 [Inject]
 [Bindable]
 public var modelView:AddMeButtonPresenter;

 override public function set data(value:Object):void 
 {
 panel.title = value.appName;
 } 

 protected function button1_addedHandler(event:Event):void
 {//I need this to solve the roll-over problem
 currentState = modelView.currentState;
 }

 ]]>
 </fx:Script>

 <s:states>
 <s:State name="default" />
 <s:State name="USER_UNKNOWN" />
 <s:State name="USER_EXISTS" />
 <s:State name="USER_DOESNT_EXIST" />
 </s:states>

 <s:Panel left="0" top="0" width="150" height="100" id="panel">
 <s:Button includeIn="USER_UNKNOWN" label="Checking..." enabled="true" horizontalCenter="0"
 verticalCenter="0"/>
 <s:Button includeIn="USER_EXISTS" label="Unsubscribe" click="modelView.unsubscribe()"
 enabled="true" horizontalCenter="0" verticalCenter="0"/>
 <s:Button includeIn="USER_DOESNT_EXIST" label="Subscribe" click="modelView.subscribe()"
 enabled="true" horizontalCenter="0" verticalCenter="0"/>
 <s:Button includeIn="default" label="..." added="button1_addedHandler(event)"
 horizontalCenter="0" includeInLayout="false" verticalCenter="0"/>
 </s:Panel>
</s:ItemRenderer>

1 Ответ

3 голосов
/ 02 мая 2011

Взгляните на protected function getCurrentRendererState():String из spark.components.supportClasses.ItemRenderer ( документация ) и переопределите его правильно.

...