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

JavaScript fuer Eclipse-Entwickler

Titel: JavaScript fuer Eclipse-Entwickler Kostenlos Bücher Online Lesen
Autoren: Benjamin Papick u Barth Simon u Taboada Tim u Kaegi Buschtoens
Vom Netzwerk:
interpretiert werden. Wenn möglich entfernt man daher die Teile des JavaScript-Projekts, die man voraussichtlich nicht benötigt, und komprimiert alle Quelltexte in eine JavaScript-Datei. Beim CKEditor ist das dank seines Plug-in-Konzepts und eines eigenen Kompressionstools kein Problem [3]. Wenn das Projekt keinen eigenen Skriptkompressor anbietet (und nicht vorkomprimiert ist), kann man einen anderen, beispielsweise den YUI Compressor [4], verwenden. In unserem Beispiel reduzieren wir den Editor so, dass nur die gewünschten grundlegenden Formatierungsoptionen zur Verfügung stehen. Wer mehr Funktionalität benötigt, muss entsprechend weniger Plug-ins entfernen, dafür aber auch eine etwas größere js -Datei in Kauf nehmen.
    Sofern die JavaScript-Komponente über Styling oder andere statische Konfigurationsmöglichkeiten verfügt, sollte sie ebenfalls angepasst werden. Um ein möglichst neutrales Erscheinungsbild zu erreichen, wurde im vorliegenden Beispiel ein vorhandenes Skin leicht modifiziert übernommen.
    Damit die benötigten Ressourcen (Bilder, CSS- und JavaScript-Dateien etc.) von RAP ausgeliefert werden können, müssen diese beim Framework registriert werden. Dazu bietet RAP einen ResourceManager , auf dessen Instanz mittels RWT.getResourceManager() zugegriffen werden kann. Die Ressourcen müssen nur einmal pro Applikation registriert werden. Da bei RAP mehrere Applikationen parallel laufen können, kann das nicht statisch geschehen. In der in Listing 3.3 gezeigten Methode registerResources() werden die Ressourcen nur beim ersten Aufruf innerhalb der Applikation registriert. Die Namen der Dateien werden aus einer Array-Konstante ( RESOURCE_FILES ) ausgelesen. Um den URL zu ermitteln, muss zudem noch getURL implementiert werden. Dabei wird davon ausgegangen, dass die HTML-Datei der erste Eintrag in RESOURCE_FILES ist. Für zukünftige RAP-Versionen ist dafür ein vereinfachtes API geplant. Der Editor kann jetzt bereits in einer einfachen Demoanwendung angezeigt werden (Abb. 3.2).
    private static final String RESOURCES_PATH = "resources/";
private static final String REGISTER_PATH = "ckeditor/";

private void registerResources() {
IResourceManager resourceManager = RWT.getResourceManager();
boolean isRegistered
= resourceManager.isRegistered
( REGISTER_PATH + RESOURCE_FILES[ 0 ] );
if( !isRegistered ) {
try {
for( String fileName : RESOURCE_FILES ) {
register( resourceManager, fileName );
}
} catch( IOException ioe ) {
throw new IllegalArgumentException
( "Failed to load resources", ioe );
}
}
}

private void register( IResourceManager resourceManager,
String fileName )
throws IOException
{
ClassLoader classLoader = CKEditor.class.getClassLoader();
InputStream inputStream
= classLoader.getResourceAsStream
( RESOURCES_PATH + fileName );
try {
resourceManager.register
( REGISTER_PATH + fileName, inputStream );
} finally {
inputStream.close();
}
}

private String getURL() {
IResourceManager resourceManager = RWT.getResourceManager();
return resourceManager.getLocation
( REGISTER_PATH + RESOURCE_FILES[ 0 ] );
}
    Listing 3.3

    Abbildung 3.2: Der CKEdtior als Teil einer RAP-Anwendung

3.4 Lesen und Schreiben
    Nun kann der Benutzer zwar mit dem Widget interagieren, aber ein Informationsaustausch mit der restlichen Anwendung findet noch nicht statt. Unser erstes Ziel besteht darin, einen Text zu setzen und nach dem Editieren wieder auszulesen. Da dieser Text als JavaScript String behandelt wird und beliebige Zeichen beinhalten kann, müssen alle Zeichen maskiert werden, die diesen unterbrechen können (Zeilenumbrüche, Anführungszeichen). Dazu implementieren wir die Hilfsmethode escapeText . Die eigentlichen Setter und Getter sehen dann in der einfachsten Variante folgendermaßen aus:
    public void setText( String text ) {
browser.evaluate(
"editor.instance.setData( \"" + escapeText( text ) + "\" );"
);
}

public String getText() {
return ( String )browser.evaluate( "return editor.instance.getData();" );
}
    Die Anwendung kann nun den Text des Widgets setzen und auslesen, vorausgesetzt das geschieht, nachdem das HTML-Dokument und der CKEditor vollständig geladen wurden. Der folgende Code wird jedoch noch nicht wie erwartet funktionieren:
    CKEditor ckEditor = new CKEditor( shell, SWT.NONE );
ckEditor.setText( "Hello World!" );
System.out.println( ckEditor.getText() );
    Der Grund dafür ist, dass das HTML-Dokument durch den Browser asynchron geladen wird und deshalb nicht sofort nach dem Setzen des URL

Weitere Kostenlose Bücher