1

フレックスの折れ線グラフを作成しており、年ごとのデータの進捗状況を確認できます。スライダーを使ってフィルターをかけてみましたが、うまくいかないようです。助けてください?私はデータプロバイダーを正確にフィルタリングしているのではなく、アルファ版をフィルタリングしています。私の関数は配列コレクションからすべての情報を取得しますが、アルファを0に設定します。したがって、ユーザーがスライダーをドラッグしたときに、年がその特定の年を下回ると、データが表示され、アルファを100に設定します。

データはそこにあり、軸はすべて設定され、アルファは0に設定されています。しかし、問題は、情報が希望どおりに1行ずつ表示されないことです。代わりに、グラフ全体が表示されるのはiスライダーを最後までドラッグします...

これらは私のコードです

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
 <![CDATA[
     import mx.collections.ArrayCollection;
     import mx.rpc.events.ResultEvent;

     [Bindable]
     public var expenses:ArrayCollection = new ArrayCollection([
        {Year:"1990", Profit:2000 },
        {Year:"1991", Profit:1000 },
        {Year:"1992", Profit:1500 },
        {Year:"1993", Profit:2100 },
        {Year:"1994", Profit:2500 },
        {Year:"1995", Profit:1500 },
        {Year:"1996", Profit:1900 },
             ]);


                private function init():void {
                    expenses.filterFunction = sliderFilterFunc;
                    expenses.refresh();
                }

                private function sliderFilterFunc(item:Object):Boolean{
                        var result:Boolean = true;
                        pro.alpha=0;
                        if(item.Year<=slider.value || item.Year==slider.value)
                        {
                        pro.alpha=100;
                        return result;
                        }
                return result;


                }

  ]]></mx:Script>
    <mx:VBox horizontalCenter="0" top="10" horizontalAlign="center" height="100%">
        <mx:HSlider id="slider" minimum="1990" maximum="1996" value="220" liveDragging="true" change="init()" width="570" snapInterval="1" dataTipPrecision="0" labels="['1990','1996']" tickInterval="1"   themeColor="#000000" borderColor="#FFFFFF" fillAlphas="[1.0, 1.0, 1.0, 1.0]" fillColors="[#000000, #000000, #FFFFFF, #1400D1]" height="48" styleName="myDataTip"/>
        <mx:Panel title="Line Chart with One Shadow">
        <mx:LineChart id="myChart" dataProvider="{expenses}" showDataTips="true" >
              <mx:seriesFilters>
                <mx:Array/>
              </mx:seriesFilters>
              <mx:horizontalAxis>
                 <mx:CategoryAxis
                      dataProvider="{expenses}"
                      categoryField="Year"
                 />
              </mx:horizontalAxis>
              <mx:series>
                 <mx:LineSeries id="pro" alpha="0"
                      yField="Profit"
                      displayName="Profit"
                 />
              </mx:series>
           </mx:LineChart>

           <mx:Legend dataProvider="{myChart}" />
        </mx:Panel>
    </mx:VBox>

</mx:Application>

ごちゃごちゃしてすみません。:(

4

2 に答える 2

1

日付を x 軸として使用しているようです。スライダーは数値間で「スライド」できます。

私がすることは、経費の ArrayCollection を次のようにすることです。

public var expenses:ArrayCollection = new ArrayCollection([
    {Year: new Date(1990), Profit:2000 },
    {Year: new Date(1991), Profit:1000 },
    ...

次に、フィルター関数の場合:

private function sliderFilterFunc(item:Object):Boolean {
    pro.alpha = item.Year.getTime() <= slider.value ? 100 : 0;
    return true;
}

また、データ ポイントを除外するだけでなく、アルファを 0 に設定してもよろしいですか? ArrayCollection を縮小したい場合 (ソースである Array ではなく、ArrayCollection が縮小されることを心配しないでください)、次のようにするだけです。

private function sliderFilterFunc(item:Object):Boolean {
    return = item.Year.getTime() <= slider.value;
}

最後に、スライダーに独自の dataTipFunction を設定して、数値ではなく実際の日付を表示するようにする必要があります。

于 2009-07-18T01:41:35.543 に答える
1

すべてのフィルタリング プロセスを完全に MXML で処理する Flex ライブラリ (DataFilterLib) を作成しました。このライブラリは無料です。プロジェクトの詳細は http://code.google.com/p/flex-datafilterlib/にあり ます。例を見たい場合は、すべてプロジェクトのページにあります (ソースは): さまざまな Flex UI コンポーネント (CheckBox、Slider、List など) を使用して、複数の基準でフィルター処理する方法を確認したい場合は、オンラインの例を確認してください。これらのフィルターをスライダー (親指 2 つ) で使用すると、データを簡単にフィルター処理でき、チャートに自動的に反映されます。

ありがとう、ファビアン

于 2009-10-02T18:47:56.693 に答える