Sébastien Pertus
Création d'un ScriptControl Ajax
Création d'un contrôle ScriptControl, à l'aide du framework Ajax Extensions 1.0 et l'Atlas Toolkit
Par Sébastien Pertus publié le 14/05/2007 à 08:33, lu 2392 fois, 9 pages
 2 | Comparaison des deux modèles
Nous allons comparer les deux classes principales de l'ATLAS Toolkit nous permettant d'étendre ou de créer des contrôles.
D'un coté nous avons les Extenders, issus de la classe ExtenderControlBase (qui hérite elle-même de la classe ExtenderControl) et de l'autre les ScriptsControls qui héritent eux de la class ScriptControlBase (qui hérite elle-même de la classe ScriptControl)
Finalement ces deux classes encapsulent chacun à leur manière les deux interfaces fournies par le Framework Ajax.Net Extensions 1.0, à savoir IExtenderControl pour le premier et IScriptControl pour le second.
Le raisonnement de la communauté de développement de la toolkit reste donc très cohérent.
C'est de cette classe que nous avons héritée dans notre premier article pour créer notre extender.
Le problème c'est qu'elle n'hérite pas de WebControl (mais de Control) et n'implémente pas l'interface ICallbackEventHandler (Inutile de toute façon puisque seul les WebControls ont une chance de voir leur méthodes, implémentées par cette interfaces, appelées.)
Voilà donc la limitation de cette classe quand on essaie d'implémenter du CallBack Ajax.
Cet article va se focaliser sur cette classe abstraite qui va nous permettre de développer notre contrôle.Si l'on observe bien cette classe, on peut voir déjà dans sa définition, qu'elle hérite de ScriptControl biensur, mais aussi de WebControl, ce qui est une bonne nouvelle et nous conforte dans l'idée que nous pourrons suremment implémenter tout un tas d'interfaces pour mettre en place du CallBack et du PostBack :

public abstract class ScriptControl : WebControl, IScriptControl

{

    protected ScriptControl();

 

    protected abstract IEnumerable<ScriptDescriptor> GetScriptDescriptors();

    protected abstract IEnumerable<ScriptReference> GetScriptReferences();

    protected override void OnPreRender(EventArgs e);

    protected override void Render(HtmlTextWriter writer);

}

D'ailleurs c'est exactement ce que fait la classe ScriptControlBase !

public class ScriptControlBase : ScriptControl, INamingContainer,

    IControlResolver, IPostBackDataHandler, ICallbackEventHandler, IClientStateManager

 {

    …

  }

Nous avons donc une classe qui masque quelque peu la tuyauterie en encapsulant tous ces mécanismes de base et nous permettre de nous focaliser sur notre contrôle et son fonctionnement métier.
Quelle est la différence entre ScriptControl et ExtenderBase ?
Et bien pour faire simple, l'Extender va nous permettre de créer un contrôle qui étend les fonctionnalités d'un contrôle existant, tandis que le ScriptControl lui est une base pour créer un nouveau contrôle de toute pièce (et non pas étendre un contrôle).
Vous avez déjà un exemple dans la toolkit, en la personne du TabControl, qui n'étend pas de contrôle existant. C'est un contrôle à part entière !

  public class TabContainer : ScriptControlBase

    {

….

    }

 
» Démarrer une discussion