Realizzare un custom extender AJAX con ASP.NET 3.5

4 pagine in totale: <<Indietro 1 2 3 [4]

Transizione dello stato e visualizzazione della tooltip

Come già detto, il cuore pulsante di TooltipBehavior è insito nella logica di gestione delle transizioni di stato, presente all'interno del metodo _handleStateTransition richiamato ad ogni invocazione di set_currentState.

// gestione delle transizioni di stato
_handleStateTransition : function(previousState, newState) {

  // gestione dell'uscita dallo stato
  if (previousState === AspitaliaExtender.TooltipState.Showing)
  {
    this._showingExit();
  }

  // gestione dell'ingresso nello stato
  if (newState === AspitaliaExtender.TooltipState.Showing)
  {
    this._showingEnter();
  }
  else if(newState === AspitaliaExtender.TooltipState.Showed)
  {
    this._showedEnter();
  }
  else if(newState === AspitaliaExtender.TooltipState.Out)
  {
    this._outEnter();
  }
}

Come si può notare, esso non fa altro che richiamare i vari gestori di ingresso/uscita da uno stato, che hanno a loro volta il compito di implementare la logica funzionale descritta precedentemente, nel paragrafo relativo al progetto del nostro RichTooltipExtender. Per gestire l'ingresso nello stato Showed, ad esempio, il metodo privato _showedEnter() può essere implementato come segue:

_showedEnter : function() {
  this._showTooltip();
  var delegate = Function.createDelegate(this, function()
    {
      this.set_currentState(AspitaliaExtender.TooltipState.Out);
      this._showedTimeout = null;
    }
  );
  this._showedTimeout = setInterval(delegate, this.get_hidingTime());
}

In base a quanto detto ad inizio articolo, il metodo in questione ha il compito di visualizzare la tooltip e, successivamente, di schedulare tramite l'istruzione setInterval una migrazione verso lo stato Out appena trascorso il periodo di tempo indicato dalla proprietà hidingTime.

Il metodo _showTooltip è estremamente semplice e si occupa di modificare al volo qualche attributo del DIV utilizzato come contenitore per la Tooltip in modo da renderlo visibile e posizionandolo alle coordinate volute:

_showTooltip : function() {
  this._tooltipPanel.style.position = 'absolute';
  this._tooltipPanel.style.left = (this._mousePosition.x + 10) + "px";
  this._tooltipPanel.style.top = (this._mousePosition.y + 10) + "px";
  this._tooltipPanel.innerHTML = this._tooltipHTML;
  this._tooltipPanel.style.display = 'block';
}

Conclusioni

Questo articolo si è voluto innanzi tutto dare una dimostrazione di come ASP.NET AJAX metta a disposizione una vera e propria infrastruttura per componentizzare, all'interno di un custom extender, un comportamento lato client che possa essere poi applicato a situazioni eterogenee. Sebbene con tutte le semplificazioni imposte dallo scopo didattico, anche l'esempio mostrato mette in luce la versatilità di questa scelta architetturale. RichTooltipExtender è infatti applicabile ad un gran numero di oggetti target (e quindi di situazioni eterogenee), ad esempio, per mostrare i dettagli di un prodotto in un sito e-commerce, come mostrato in figura 4.

Figura 4
Figura 4 - Un caso di utilizzo di RichTooltip in un sito e-commerce

Realizzare un extender, soprattutto nella sua componente Javascript, non è però tra le imprese più semplici, perchè il codice non è type-safe, perchè il supporto dato dall'intellisense non è lo stesso che si ha a disposizione in C# e anche perchè le classi sono intrinsecamente un po' prolisse. Ma è proprio in situazioni come queste che si evidenzia maggiormente il valore aggiunto che può dare la dovuta attenzione alla fase progettuale. Un domani, infatti, si potrebbe pensare di rendere TooltipBehavior facilmente estendibile a sua volta, magari sollevando un evento client prima di visualizzare la tooltip stessa. Basterebbe modificare leggermente il solo metodo _showTooltip per far sì che, ad esempio, l'utente possa popolare al volo la tooltip invocando, via AJAX, un servizio sul server per recuperare informazioni. Si tratta di un argomento che esula ovviamente dagli scopi di questo articolo, ma rende sicuramente l'idea di come un design ben strutturato fornisca ovvi benefici per tutte le necessità di espandibilità future, mantendo al tempo stesso una buona leggibilità e strutturazione del codice.

4 pagine in totale: <<Indietro 1 2 3 [4]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC