2010-09-04 5 views
0

J'ai flex 4, zend & php. J'essaie de générer un graphique w/5 ans de données & puis laissez l'utilisateur (sans faire un autre appel au serveur) obtenir un graphique 1 an w/les mêmes données. (En d'autres termes, la valeur de 1 an des données est un sous-ensemble des 5 ans). Je peux obtenir le graphique initial de 5 ans mais quand j'essaie d'appliquer un filtre, comme ci-dessous, je ne reçois aucune donnée. Qu'est-ce que je fais mal?Flex Chart ne filtre pas

J'ai le code suivant:

`

<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> 


`

C'est ce que mon code PHP ressemble. Rappelez-vous, j'utilise 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

N'avez-vous aucune donnée à afficher dans le tableau, même sans le filtre? Si vous définissez un point d'arrêt sur un gestionnaire de résultat pour getDataResult, voyez-vous les données? Est-ce que les objets dans ArrayCollection ont des propriétés correctes pour le prix et la date? –

+0

Essayez de lier la propriété de liste ArrayCollection au lieu de source à getDataResult.lastResult (ou source à lastResult.source). Il semble que le résultat est déjà un ArrayCollection et que la source ne prend qu'un Array. – Dave

+0

Flex renvoie une variable datetime formatée comme: "Mon Sep 5 20:00:00 GMT-0400 2005" ..... comment puis-je obtenir une date> ou kristen

Répondre

1

Pour votre date cas de gamme, vous pouvez essayer quelque chose comme:

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()"/> 

Vous devez vous assurer d'appeler refresh sur votre ArrayCollection à appliquez le filtre à nouveau. Juste lancé dans une action de clic de bouton pour un exemple d'interaction de l'utilisateur.

+0

woops, j'ai raté la partie que vous avez dit que vous ne voyez pas de données du tout :) de toute façon James et vos commentaires effacé quelques trucs alors j'ai commenté là. – Dave