Flex Chart не будет фильтровать - PullRequest
0 голосов
/ 04 сентября 2010

У меня есть flex 4, zend & php.Я пытаюсь сгенерировать график с данными за 5 лет, а затем позволить пользователю (без повторного обращения к серверу) получить график за 1 год с теми же данными.(Другими словами, данные за 1 год представляют собой подмножество 5 лет).Я могу получить начальный 5-летний график, но когда я пытаюсь применить фильтр, как показано ниже, я не получаю данных.Что я делаю не так?

У меня есть следующий код:

`

 <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:datadata="services.datadata.*">
<fx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.events.FlexEvent;

        protected function getData(event:FlexEvent):void
        {                               
            getDataResult.token = dataData.getData();

        }

        public function filterByRange(item:Object):Boolean 
        {
            var result:Boolean = true;

            if (item.date.time > 2007-01-01 && item.date.time < 2008-12-31 ){
                result = false;
            }
            return result;
            dg.refresh();
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <s:ArrayCollection id="dg" filterFunction="filterByRange" list="{getDataResult.lastResult}"  />
    <s:CallResponder id="getDataResult"/>
    <datadata:DataData id="dataData" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
</fx:Declarations>



<mx:AreaChart id="areachart1" width="100%" height="100%" creationComplete="getData(event)" dataProvider="{dg}" showDataTips="true">
    <mx:series>
        <mx:AreaSeries yField="price" id="areaSeries" xField="date"/>
    </mx:series>
    <mx:horizontalAxis>
        <mx:DateTimeAxis/>
    </mx:horizontalAxis>
</mx:AreaChart>


`

Это то, что мой код PHPпохоже.Помните, я использую Zend.

`

           public function getData() {

    $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename");        
    $this->throwExceptionOnError();

    mysqli_stmt_execute($stmt);
    $this->throwExceptionOnError();

    $rows = array();

    mysqli_stmt_bind_result($stmt, $row->date, $row->price);

    while (mysqli_stmt_fetch($stmt)) {
      $row->date = new DateTime($row->date);
      $rows[] = $row;
      $row = new stdClass();
      mysqli_stmt_bind_result($stmt, $row->date, $row->price);
    }

    mysqli_stmt_free_result($stmt);
    mysqli_close($this->connection);

    return $rows;
}

`

1 Ответ

1 голос
/ 04 сентября 2010

Для вашего диапазона дат вы можете попробовать что-то вроде:

private var startDate:Date = new Date(0); // epoch
private var endDate:Date = new Date(); // now

public function filterByRange(item:Object):Boolean 
{
    var itemDate:Date = item.date;
    return (itemDate.time > startDate.time) && (itemDate.time < endDate.time);
}

private function onClick():void
{
    startDate = new Date("2007/01/01");
    endDate = new Date("2008/12/31");
    dg.refresh();
}

...

<s:Button click="onClick()"/>

Вам нужно будет вызвать refresh в ArrayCollection, чтобы снова применить фильтр. Просто добавьте действие нажатия кнопки для примера взаимодействия с пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...