Bücher online kostenlos Kostenlos Online Lesen
JavaScript fuer Eclipse-Entwickler

JavaScript fuer Eclipse-Entwickler

Titel: JavaScript fuer Eclipse-Entwickler
Autoren: Benjamin Papick u Barth Simon u Taboada Tim u Kaegi Buschtoens
Vom Netzwerk:
Stabilität der Anwendung dar.

    Abbildung 3.1: Funktionsweise des Browser-Widgets
    Die Methode evaluate führt einen gegebenen String unmittelbar innerhalb des Browser-Widgets als JavaScript-Code aus. Sie gibt ein Java-Objekt zurück, das einen JavaScript-Wert repräsentiert, beispielsweise als String , Double oder Boolean. Wird im JavaScript-Code kein return -Statement verwendet, ist das Ergebnis null . Sollte beim Ausführen ein Fehler auftreten, wirft evaluate eine SWTException . Leider gibt die Exception keine Auskunft über den Fehler selbst, womit die gelegentliche Fehlersuche nicht unbedingt erleichtert wird. Es gibt eine weitere, sehr ähnliche Methode namens execute (seit RAP 1.1), sie bietet jedoch keinen Rückgabewert, wirft im Fehlerfall keine Exception und ist daher nicht zu empfehlen.
    Die Klasse BrowserFunction bietet die Möglichkeit, Java-Code aus JavaScript heraus aufzurufen. Dazu erzeugt man eine neue Instanz von BrowserFunction und überschreibt dabei die Methode function . Der Konstruktor erhält als erstes Argument das Browser-Widget und als zweites den Namen, über den die Funktion in JavaScript aufgerufen werden kann. Es ist möglich, einer Browserfunktion beim Aufruf beliebig viele Argumente zu übergeben oder ein Java-Objekt an den Aufrufer der JavaScript-Funktion zurückzugeben, zum Beispiel folgendermaßen:
    new BrowserFunction( browser, "callJava" ) {
public Object function( Object[] arguments ) {
System.out.println( ( String )arguments[ 0 ] );
return "bar";
}
};
    In JavaScript könnte nun folgender Aufruf ausgeführt werden: alert( callJava( "foo" ) ); . Dadurch würde "foo" auf der Java-Konsole und "bar" im Browser ausgegeben.

3.2 Anlegen des Custom Widgets
    Auch wenn RAP-Anwendungen ohne OSGi betrieben werden können, ist es eine gute Praxis, wiederverwendbare Komponenten für die Verwendung im OSGi-Umfeld vorzubereiten. Deshalb sollte das Custom Widget in einem OSGi Bundle verpackt werden. Wir erzeugen dazu ein neues Plug-in-Projekt und definieren eine Bundle Dependency auf org.eclipse.rap.rwt . In diesem Bundle legen wir eine neue Klasse CKEditor an, die sich von org.eclipse.swt.widgets.Composite ableitet. Diese Vorgehensweise entspricht den Richtlinien für Custom-Widget-Entwicklung mit SWT [2]. Im Konstruktor erzeugen wir als einziges Kind ein Browser-Widget und passen es mittels FillLayout an die volle Größe seines Parents an. Damit das Browser-Widget nicht den Hintergrund des Composites überschreibt, wird die Eigenschaft BackgroundMode auf SWT.INHERIT_FORCE gesetzt. Dadurch wirkt die setBackground -Methode des Custom Widgets weiterhin wie erwartet. Der URL wird von einer Methode ermittelt, die wir später implementieren (Listing 3.1).
    public CKEditor( Composite parent, int style ) {
super( parent, style );
super.setLayout( new FillLayout() );
this.setBackgroundMode( SWT.INHERIT_FORCE );
browser = new Browser( this, SWT.BORDER );
browser.setUrl( getURL() );
}
    Listing 3.1

3.3 Laden der JavaScript-Komponente
    Mit setUrl wird ein HTML-Dokument geladen, das den eigentlichen Editor enthält. Wir erstellen es selbst mit einem beliebigen Texteditor. Es besteht mindestens aus dem HTML-Grundgerüst und zwei SCRIPT Tags. Das erste Tag wird zum Laden des JavaScript-Projekts (bei uns der CKEditor) benötigt, und das zweite beinhaltet ein minimales Initialisierungsskript. Dieses sorgt in unserem Beispiel dafür, dass eine neue Editorinstanz erzeugt und an die volle Größe des Dokuments angepasst wird. Damit es zum richtigen Zeitpunkt (nach dem Laden des restlichen Dokuments) ausgeführt wird, benutzen wir das "load"- Event des BODY Tags (Listing 3.2).
    






    Listing 3.2
    Die fertige Datei wird in unserem Projekt in einen neuen Ordner resources innerhalb des src -Ordners abgelegt. Dorthin kopieren wir auch alle anderen benötigten Dateien (JavaScript, CSS, Bilder). Aus Performancegründen ist es wünschenswert, dass der gesamte JavaScript-Quelltext in nur einer Datei vorliegt (hier ckedior.js ), die von möglichst geringer Größe ist. Schließlich muss der gesamte Code in jeder neuen Instanz des Widgets neu
Vom Netzwerk:

Weitere Kostenlose Bücher