Flexには、IconItemRenderer基本クラスを拡張してカスタムIconItemRendererを作成するクラスがあります。リスト内でこのカスタムアイテムを使用しており、マウスの押下を聞いています。マウスを押す場所に応じて、さまざまなオプションがあります。その1つは、別のビューに移動することです。リストの変更リスナーを使用して新しいビューにプッシュする方法は知っていますが、実装したくありません。マウスクリックの考え方は、場所に応じて、リストから要素を削除したり、現在の要素を開いたりできるというものです。
私の人生では、IconItemRenderer内から新しいビューに移動するためのメソッドを見つけることができません。これは私が使用しているコードであり、クラスとそれを実装するリストの両方です。
package components { import spark.components.Button; import spark.components.IconItemRenderer; import spark.utils.MultiDPIBitmapSource; public class DeleteItemRenderer extends IconItemRenderer { private var btn:Button; private var xIcon:MultiDPIBitmapSource; public function DeleteItemRenderer() { super(); super.iconWidth = super.iconHeight = 40; super.labelField = 'title'; super.decorator = "assets/delete.png"; } override public function set data(value:Object):void{ super.data = value; } override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void{ setElementPosition(decoratorDisplay, unscaledWidth-40, 5); setElementSize(decoratorDisplay, 40, 40); } override protected function measure():void{ measuredHeight = 50; } override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void{ graphics.beginFill(0xffffff); graphics.drawRect(0, 0, unscaledWidth, unscaledHeight); graphics.endFill(); decoratorDisplay.smooth = true; graphics.lineStyle(1,0xcccccc,1); graphics.drawRect(0, 0, unscaledWidth, unscaledHeight); graphics.endFill(); } } }
リスト
<s:List id="survey_list" visible="true" width="98%" height="70%" contentBackgroundColor="#FFFFFF" horizontalCenter="0">
<s:itemRenderer>
<fx:Component>
<components:DeleteItemRenderer width="99.9%" height="98%" verticalAlign="top" click="detectActionPress();">
<fx:Script>
<![CDATA[
import spark.components.ViewNavigator;
import spark.components.View;
import mx.events.FlexEvent;
import mx.core.FlexGlobals;
import mx.core.UIComponent;
import spark.components.List;
private var application:UIComponent = FlexGlobals.topLevelApplication as UIComponent;
private var pressOpen:Number = application.width - 40;
//private var _navigator:ViewNavigator = FlexGlobals.topLevelApplication.navigation; //navigation is not defined uhhhh why????
private function detectActionPress():void{
var localX:Number = this.mouseX;
if(localX <= pressOpen){
engangeElement();
}
else{
deleteElement();
}
}
private function deleteElement():void{
var parentList:List = owner as List;
parentList.dataProvider.removeItemAt(parentList.dataProvider.getItemIndex(data));
trace('element removed');
}
private function engangeElement():void{
var parentList:List = owner as List;
var _test:ViewNavigator = this.parentDocument as ViewNavigator;
//this.parentApplication.navigator.pushView(views.UnfinishedSurvey, parentList.selectedItem.shortcode)
_test.pushView(views.UnfinishedSurvey, parentList.selectedItem.shortcode);
}
]]>
</fx:Script>
</components:DeleteItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
ナビゲーターにアクセスできないのはengageElement();
なぜですか?
ありがとう