Freigeben über


Erstellen einer Clientkomponentenklasse mit dem Prototypmodell

Aktualisiert: November 2007

In diesem Abschnitt wird gezeigt, wie eine AJAX-Clientkomponentenklasse in ASP.NET erstellt wird. Eine AJAX-Clientklasse, die Basiskomponenten, Verhalten und Steuerelementklassen umfasst, wird in ECMAScript (JavaScript) unter Verwendung des Prototypmodells und der JSON-Notation definiert. In JSON-Notation werden alle Prototypmember mit Kommas getrennt. Es folgt kein Komma nach dem letzten Member im Prototyp.

Im folgenden Beispiel wird eine einfache Clientkomponentenklasse, die über keine praktische Funktionalität verfügt, definiert. Es veranschaulicht, wie eine von der Component-Basisklasse abgeleitete Klasse mit dem Prototypmodell definiert wird.

// Declare a namespace.
Type.registerNamespace("Samples");

// Define a simplified component.
Samples.SimpleComponent = function()
{
    Samples.SimpleComponent.initializeBase(this);

    // Initialize arrays and objects in the constructor
    // so they are unique to each instance.
    // As a general guideline, define all fields here. 
    this._arrayField = [];
    this._objectField = {};
    this._aProp = 0;
}
// Create protytype.
Samples.SimpleComponent.prototype = 
{
    // Define set and get accessors for a property.
    Set_Aprop: function(aNumber)
    {
        this._aProp = aNumber;
    },

    Get_Aprop: function()
    {
        return this._aProp;
    },

    // Define a method.
    DoSomething: function()
    { 
       alert('A component method was called.');
    }
} // End of prototype definition.


// Register the class as derived from Sys.Component.
Samples.SimpleComponent.registerClass('Samples.SimpleComponent', Sys.Component);

Die folgenden Schritte beschreiben, wie eine ASP.NET-AJAX-Clientklasse, einschließlich Steuerelementklassen, definiert wird:

  1. Wenn die Klasse Teil eines Namespace ist, registrieren Sie den Namespace durch den Aufruf der Type.registerNamespace-Methode.

  2. Definieren Sie die Konstruktorfunktion der Klasse und deren Namespace im Konstruktorfunktionsnamen. Deklarieren Sie im Konstruktor alle privaten Felder. Es wird empfohlen, dass private Variablen im Konstruktor als Instanzfelder unter Verwendung eines this-Zeigers deklariert werden. Private Felder werden gemäß der Konvention mit einem Unterstrichpräfix benannt.

    Samples.SimpleComponent = function()
    {
        Samples.SimpleComponent.initializeBase(this);
    
        this._arrayField = [];
        this._objectField = {};
        this._aProp = 0;
    }
    
  3. Definieren Sie den Klassenprototyp. Definieren Sie im Prototyp alle öffentlichen und privaten Methoden. Dies schließt Accessormethoden für die Eigenschaften und Ereignisse ein.

    Es wird empfohlen, sämtliche Felder im Konstruktor zu definieren. Es gibt eine geringe Leistungssteigerung, wenn Felder im Prototyp definiert werden anstatt in der Konstruktorfunktion. Allerdings können nicht alle Feldtypen im Prototyp deklariert werden. Beispielsweise müssen Array- und Object-Feldtypen im Konstruktor deklariert werden, damit sie für jede Instanz eindeutig sind, anstatt von allen Instanzen aus in den Prototyp zu verweisen. Dies vermeidet unbeabsichtigte Nebeneffekte beim Aktualisieren einer Komponenteneigenschaft, die lediglich in einer Instanz aktualisiert werden soll, jedoch den Wert für alle Instanzen ändert.

    Hinweis:

    Verweisen Sie im Prototyp immer durch den this-Zeiger auf die Member. Der this-Zeiger verfügt über einen Leistungsvorteil, da das Workingset weniger Arbeitsspeicher verwendet.

  4. Registrieren Sie die Klasse durch Aufrufen der Type.registerClass-Methode. Weitere Informationen zur Verwendung der Type.registerClass-Methode zum Registrieren einer Klasse und zum Deklarieren der Schnittstellen und der Basisklasse finden Sie unter Type.registerClass-Methode.

Siehe auch

Aufgaben

Erstellen von benutzerdefinierten nicht visuellen Clientkomponenten