Как сделать заказ по дате, взятой из MySQL на ColumnCharts (xField = "date")? - PullRequest
0 голосов
/ 17 июня 2011

Я новичок во Flex и использую Flash Builder 4.5. Я так расстроен .. Пытаюсь решить эту проблему со вчерашнего утра и кажется, что ресурсов просто недостаточно, чтобы узнать больше о Flex!

так вот в чем проблема: у меня есть поле базы данных с типом данных date, и я просто не могу заказать по нему xField! я пробовал так много вещей, и ничего не работает .. когда я пытаюсь заказать его по id, он работает, но не поддерживает даты или что-то в этом роде.

вот формат php для даты:

      $row->date = new DateTime($row->date);
      $row->date = $row->date->format( "d/m/Y" );

Теперь, когда я пытаюсь сделать xField = "date", столбцы не отображаются, а xField по-прежнему [0 20 40 60 и т. Д.].

Я открыт для новых предложений, меня не волнует, как я просто хочу показывать даты на xField.

И, пожалуйста, как я уже сказал, я немного новичок, поэтому, пожалуйста, сделайте ваши ответы понятными.

Надеюсь, кто-нибудь сможет мне помочь с этим, спасибо, ребята!

РЕДАКТИРОВАТЬ: вот весь код FLEX:

<?xml version="1.0" encoding="utf-8"?>
<s:Application 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:fanpagesservice="services.fanpagesservice.*"
               width="914" height="636" minWidth="955" minHeight="600" backgroundColor="#000000"
               creationComplete="application1_creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            import mx.charts.events.ChartItemEvent;
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;
            import mx.rpc.events.ResultEvent;
            [Bindable] 
            private var Totals:ArrayCollection = new ArrayCollection;
            [Bindable] 
            private var Likes:ArrayCollection = new ArrayCollection;
            [Bindable]
            public var minDate:Date = new Date(2011, 06, 1);
            [Bindable]
            public var maxDate:Date = new Date(2011, 06, 30);

            protected function ResponcerTotals_resultHandler(event:ResultEvent):void
            {
                // TODO Auto-generated method stub
                Totals = event.result as ArrayCollection;

            }

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                // TODO Auto-generated method stub
                ResponderTotals.token = fanpageService.getAllFanpagesTotals();

            }

            protected function ResponderLikes_resultHandler(event:ResultEvent):void
            {
                // TODO Auto-generated method stub
                Likes = event.result as ArrayCollection;
            }

            protected function totalsPie_itemClickHandler(event:ChartItemEvent):void
            {
                // TODO Auto-generated method stub
                ResponderLikes.token = fanpageService.getAllFanpagesStats(event.hitData.item.page_name);
            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <fanpagesservice:FanpagesService id="fanpageService" />
        <s:CallResponder id="ResponderTotals" result="ResponcerTotals_resultHandler(event)" />

        <s:CallResponder id="ResponderLikes" result="ResponderLikes_resultHandler(event)" />
        <mx:SeriesInterpolate id="interpolate" duration="500"/>
    </fx:Declarations>
    <s:Panel x="18" y="9" width="878" height="613" backgroundColor="#262626" chromeColor="#000"
             color="#FFFFFF" contentBackgroundColor="#262626" fontFamily="Arial" fontSize="14"
             skinClass="spark.skins.spark.PanelSkin" textAlign="center">
        <s:layout>
            <s:BasicLayout/>
        </s:layout>
        <mx:PieChart id="totalsPie" x="10" y="10" itemClick="totalsPie_itemClickHandler(event)" dataProvider="{Totals}" showDataTips="true">
            <mx:series>
                <mx:PieSeries displayName="Series 1" field="likes" nameField="page_name" showDataEffect="{interpolate}"/>
            </mx:series>
        </mx:PieChart>
        <mx:Legend x="11" y="414" width="400" dataProvider="{totalsPie}"/>

        <mx:ColumnChart id="columnchart1" x="432" y="10" width="434" dataProvider="{Likes}"
                        showDataTips="true">
            <mx:series>
                <mx:ColumnSeries displayName="serie" yField="likes" xField="date" showDataEffect="{interpolate}"/>
            </mx:series>
        </mx:ColumnChart>
    </s:Panel>
</s:Application>

По сути, существует круговая диаграмма, когда вы нажимаете на ее часть, она должна показывать «лайки» в столбце диаграммы по датам (сколько лайков она получила каждый день). Часть щелчка работает, только xField = "date" не работает.

1 Ответ

1 голос
/ 17 июня 2011

Самое простое, что вы можете сделать?Сортируйте его на стороне php и отправьте во Flex, поскольку вы, очевидно, знаете больше о PHP, чем Flex, учитывая, что вы используете мастер для создания всего своего кода Flex.

Если вы не хотите этого делатьвам нужно будет проанализировать ваш результат, потому что ваш сервер просто отправляет строку как дату (не фактический объект Date):

protected function ResponderLikes_resultHandler(event:ResultEvent):void
{
    var array:Array = ArrayCollection(event.result).source;
    // Convert string to date object
    for each(var item:Object in array)
    {
        item.timestamp = DateFormatter.parseDateString(item.date).getTime();
    }
    // Sort array
    array.sortOn('timestamp', Array.NUMERIC);
    // Insert into collection presorted
    Likes = new ArrayCollection(array);
}

Это должно сделать это, но вам нужно то же самоедля итогов, или просто создайте функцию, которая анализирует и сортирует данные.

...