Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Il data binding

Il lavoro "nascosto", svolto da Flash Builder, per il collegamento tra dati e componenti
Il lavoro "nascosto", svolto da Flash Builder, per il collegamento tra dati e componenti
Link copiato negli appunti

Nella lezione precedente abbiamo visto come configurare una fonte di dati esterna, consumata tramite un servizio HTTP. Una volta realizzata la connessione, possiamo effettuare il binding dei dati con i nostri componenti. Esaminiamo il collegamento con DataGrid.

Anzitutto trasciniamo un componente DataGrid sullo stage dell'applicazione. Nella finestra delle proprietà impostiamo il Data provider premendo il bottone con il simbolo del binding (la catenella).

Nella finestra che appare selezioniamo "WebNewsRSS" come servizio e GetRSS() come operazione.

Cliccando su OK, il Flash Builder in automatico creerà le colonne della DataGrid e genererà anche le funzioni per la chiamata delle classi del servizio generate nel passaggio precedente.

Se lanciamo l'applicazione possiamo vedere che è già tutto funzionante. Ma qual è il lavoro che il Flash Builder ha fatto per noi? Per rendercene conto, apriamo la cartella src nel Package Explorer, dove troviamo diverse classi create automaticamente e il namespace del nostro servizio.

Figura 31. Le classi generate automaticamente
Le classi generate automaticamente

Analizzando queste classi notiamo che molti dei nomi iniziano con l'underscore (_): sono perlopiù classi che mappano gli oggetti restituiti dal servizio, ed hanno relazione diretta con le classi il cui suffisso è EntityMetadata; le classi richiamabili dal nostro codice sono invece quelle che non hanno l'undescore iniziale, ad esempio:

  1. Guid
  2. Item
  3. WebNewsRSS

Queste classi, sono vuote ed estendono la classe omonima con prefisso _Super_; sono a nostra disposizione per inserire il codice di personalizzazione opportuno.

La classe _Super_WebNewsRSS estende la classe HTTPServiceWrapper che si occupa della invocazione vera e propria del servizio e definisce tutte le sue operazioni nel costruttore della classe:

public function _Super_WebNewsRSS()
{
  // initialize service control
  _serviceControl = new HTTPMultiService(""); 
  var operations:Array = new Array();
  var operation:Operation;  
  var argsArray:Array;       
  
  operation = new Operation(null, "GetRss");
  operation.url = "http://rss.html.it/webnews.xml";
  operation.method = "GET";
  operation.serializationFilter = serializer0;
  operation.properties = new Object();
  operation.properties["xPath"] = "/::channel/::item";
  operation.resultElementType = valueObjects.Item;
  operations.push(operation);
  
  _serviceControl.operationList = operations;  
  
  model_internal::initialize();
}

Subito dopo viene definita la funzione pubblica, che abbiamo chiamato GetRss() e che svolge tutto il lavoro per noi.

Nel file .mxml, viene dichiarato il namespace che consente di instanziare direttamente l'oggetto WebNewsRSS.

<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/halo"
               xmlns:webnewsrss="services.webnewsrss.*">

Nella sezione <fx:Declarations> vengono quindi dichiarati l'oggetto WebNewsRSS e l'oggetto CallResponder. Viene anche dichiarata la funzione di callback per il fallimento (fault) dell'operazione ad un messaggio diagnostico attraverso la classe Alert; mentre non è dichiarata la funzione di callback per il risultato (result) dell'operazione, poiché i dati vengono gestiti dal binding con la DataGrid.

Nell'oggetto DataGrid viene impostato un event handler ad una funzione appositamente creata: la dataGrid_creationComplete. Inoltre viene impostata la proprietà dataProvider con il lastResult del CallResponder.

<mx:DataGrid id="dataGrid"
             creationComplete="dataGrid_creationCompleteHandler(event)"
             dataProvider="{getRssResult.lastResult}" editable="true">

Ricapitolando, quando avviamo l'applicazione in corrispondenza dell'evento creationComplete della DataGrid viene invocato il metodo GetRss() della classe WebNewsRSS. La griglia viene popolata attraverso il databinding quando vengono caricati i dati della chiamata asincrona.

Per invocare il servizio da Actionscript è sufficiente dichiarare ed istanziare una variabile di tipo WebNewsRSS, impostare il binding o le funzioni di callback per le operazioni di fault e result ed infine richiamare il metodo GetRss().

Ti consigliamo anche