リストコントロールとアイテムレンダラーがあります。アイテムレンダラー内に、各アイテムに必要な数量のテキストボックスがあります。数量の更新(テキストボックスのフォーカスアウトイベントにフォーカス)するたびに、データの値を更新しています。メインプログラムでは、これに基づいて合計を表示します。
合計コードは正しく機能しますが、リストをスクロールすると、値がページ全体に表示されます。添付されているのは、単純な下にスクロールした後にすべてが乱雑になっている値のスクリーンショットです。また、以下は完全なアイテムレンダラーです。私はこれについてウェブ上でたくさんのメモを見つけました、しかし私が試みるすべては助けにはなりません!
問題の画像へのリンクは次のとおりです。 スクロールエラー
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer name="PlowResultsRenderer"
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[
import spark.events.TextOperationEvent;
import flash.events.EventDispatcher;
import valueObjects.Tag;
import valueObjects.TagProjectItem;
import classes.QtyChangeEvent;
[Bindable]
public var lineQty:Number;
[Bindable]
public var lineList:Number;
[Bindable]
public var lineDealerCost:Number;
public var textPlaceholder:String = "0";
override public function set data( value:Object ) : void {
super.data = value;
var thisItem:TagProjectItem = data as TagProjectItem;
if (thisItem.IsOnHand || thisItem.IsOnOrder)
{
currentState = "green";
}else if (thisItem.IsOnDealerFloorplan)
{
currentState = "white";
}else
{
currentState = "red";
}
// #EEA2AD old red
lineList = Number(thisItem.ListPrice);
lineDealerCost = Number(thisItem.DealerCost);
lineQty = 0;
validateNow();
}
/*protected function dataChangeHandler(evt:Event):void {
var thisItem:TagProjectItem = data as TagProjectItem;
if (thisItem.IsOnHand || thisItem.IsOnOrder)
{
currentState = "green";
}else if (thisItem.IsOnDealerFloorplan)
{
currentState = "white";
}else
{
currentState = "red";
}
// #EEA2AD old red
lblModelNumber.text = thisItem.ModelNumber;
//lblListPrice.text = America.format(thisItem.ListPrice);
lblListPrice.text = America.format(thisItem.PromoPrice);
lblSWDescription.text = thisItem.SWDescription;
lblSWCategory.text = thisItem.SWCategory;
lineList = Number(thisItem.ListPrice);
lineDealerCost = Number(thisItem.DealerCost);
lineQty = 0;
validateNow();
}*/
protected function doFocusIn(event:FocusEvent):void
{
textPlaceholder = txtQty.text;
if (textPlaceholder == "0"){
txtQty.text = "1";
}
}
protected function doFocusOut(event:FocusEvent):void
{
if (txtQty.text != textPlaceholder){
//here the text has been changed.
var changeEvent:QtyChangeEvent = new QtyChangeEvent(QtyChangeEvent.CHANGE, Number(txtQty.text) - Number(textPlaceholder), lineDealerCost, lineList);
parent.dispatchEvent(changeEvent);
}
textPlaceholder = "0";
if (txtQty.text == ""){
txtQty.text = "0";
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<mx:CurrencyFormatter id="America" precision="2"
rounding="none"
decimalSeparatorTo="."
thousandsSeparatorTo=","
useThousandsSeparator="true"
useNegativeSign="true"
currencySymbol=""
alignSymbol="left"/>
</fx:Declarations>
<s:states>
<s:State name="green" />
<s:State name="white" />
<s:State name="red" />
</s:states>
<s:layout>
<s:HorizontalLayout gap="0"
paddingTop="1" paddingBottom="1"
verticalAlign="middle" />
</s:layout>
<s:Panel skinClass="PanelNoTitleBar" horizontalCenter="0" width="100%">
<s:Rect id="rect" width="100%">
<s:fill>
<s:SolidColor color.green="#C1FFC1" color.red="#FFC1C1" color.white="#FFEC8B">
</s:SolidColor>
</s:fill>
</s:Rect>
<s:HGroup width="100%">
<s:VGroup>
<s:Label text="Qty" paddingLeft="2" paddingRight="8" paddingTop="4" paddingBottom="1" >
</s:Label>
<s:TextInput id="txtQty" width="34" height="30"
fontSize="11" maxChars="3" restrict="0-9" softKeyboardType="number"
widthInChars="3" text="{lineQty}"
focusIn="doFocusIn(event)" focusOut="doFocusOut(event)">
</s:TextInput>
</s:VGroup>
<s:VGroup width="100%">
<s:HGroup width="100%">
<s:Label id="lblModelNumber" text="{data.ModelNumber}" paddingLeft="2" paddingRight="2" paddingTop="4" paddingBottom="1" />
<s:Spacer width="100%">
</s:Spacer>
<s:Label text="List Price: " paddingLeft="2" paddingRight="8" paddingTop="4" paddingBottom="1" />
<s:Label id="lblListPrice" text="{America.format(data.PromoPrice)}" textAlign="right" fontWeight="bold" paddingLeft="2" paddingRight="8" paddingTop="4" paddingBottom="1" />
</s:HGroup>
<s:Label id="lblSWCategory" text="{data.SWCategory}" paddingLeft="11" paddingRight="2" paddingTop="1" paddingBottom="1" />
<s:Label id="lblSWDescription" text="{data.SWDescription}" paddingLeft="11" paddingRight="2" paddingTop="1" paddingBottom="4" textAlign="right" />
</s:VGroup>
</s:HGroup>
</s:Panel>
</s:ItemRenderer>