Füllen Sie den Hintergrundcode für die Benutzerschnittstelle aus, die Sie in der vorherigen Lerneinheit erstellt haben.
lookupService GooglePlacesService{@restbinding};
Die Eigenschaft @restbinding gibt an, dass sich die Details für den Servicezugriff in Ihrem Code befinden, nicht im EGL-Implementierungsdeskriptor. Die Entscheidung ist bequem, aber unflexibel. Um die Serviceposition zu ändern, müssen Sie den Quellcode ändern. In Lerneinheit 14 wird der EGL-Implementierungsdeskriptor eingeführt. Dadurch verlagern Sie wahrscheinlich die Details für den Serverzugriff hauptsächlich in Ihre Entwicklungsarbeit.
function checkForEnter(event Event in)
if(event.ch == 10)
search();
end
end
Beachten Sie die folgende Hintergrundinformation: Der EGL-Laufzeitcode ruft die Funktion checkForEnter auf und übergibt ein Ereignisobjekt. Dies ist eine Speicherstruktur, die Details zu einem Ereignis enthält. In diesem Fall wurde der Aufruf durch das Ereignis onKeyDown verursacht und das Ereignisobjekt enthält das ASCII-Zeichen, das den Tastenanschlag des Benutzers darstellt. Konkret ist die Zahl 10 der Dezimalwert für den Wagenrücklauf (die Eingabetaste) in der ASCII-Tabelle, wie auf der folgenden Website beschrieben: ASCII Table and Description (http://www.asciitable.com).
Die Funktion checkForEnter wird nur aufgerufen, wenn der Benutzer eine Taste wie die Tabulator- oder die Eingabetaste drückt, sobald das Textfeld aktiviert ist. Die Funktion ihrerseits ruft nur die Funktion search auf, wenn die Eingabetaste gedrückt wurde. Sie werden die Funktion search bald erstellen.
function buttonClicked(event Event in)
search();
end
Mit der Funktion buttonClicked und deren Beziehung zu der schaltflächenspezifischen Eigenschaft onClick wird sichergestellt, dass beim Klicken des Benutzers auf die Schaltfläche Suchen die Funktion search aufgerufen wird.
function search()
localMap.zoom = 10;
localMap.removeAllMarkers();
// show an initial marker, as necessary to display the map at all
localMap.addMarker(new MapMarker{ latitude = "37.47", longitude = "-122.26",
address = "I am here!", description = "San Francisco"});
// Call the remote Google service, passing the type value
call lookupService.getSearchResults( typeComboBox.value ) returning to showResults
onException displayError;
end
In dieser Eingangsanzeige für eine Suchergebnismenge ist die einzige Information, die Sie für die Funktion localMap.addMarker() bereitstellen, die Markierung für den Standort in der Stadt.
linkListing HyperLink[0];
for(i int from 1 to retResult.result.getSize() by 1)
newLink HyperLink{padding = 4, text = retResult.result[i].name, href = "#"};
newLink.setAttribute("title", retResult.result[i].vicinity );
newLink.setAttribute("lat",
retResult.result[i].geometry.location.lat);
newLink.setAttribute("lng",
retResult.result[i].geometry.location.lng);
newLink.onClick ::= mapAddress;
linkListing.appendElement(newLink);
end
listingBox.setChildren(linkListing);
end
newLink HyperLink{padding = 4, text = retResult.result[i].title, href = "#"};
Der Hyperlink bewirkt, dass Code aufgerufen wird, keine Webadresse. Dennoch wird durch den Platzhalter sichergestellt, dass der Hyperlink Text in ähnlicher Weise anzeigt, nämlich mit Unterstreichungszeichen und in Farbe, wie wenn der Benutzer auf den Hyperlink klickt und dadadurch eine Website öffnet.
function mapAddress(e Event in)
// Show the marker when the user clicks the link
businessAddress string = e.widget.getAttribute("address") as string;
businessName string = e.widget.getAttribute("title") as string;
lat string = e.widget.getAttribute("lat") as string;
lng string = e.widget.getAttribute("lng") as string;
localMap.addMarker( new MapMarker{ latitude = lat,
longitude = lng, address = businessAddress, description = businessName});
End
Wenn der Benutzer während der Ausführung auf den Hyperlink klickt, ruft die Funktion mapAddress die Attribute ab, die in der Funktion showResults festgelegt wurden, und setzt eine Markierung auf die angezeigte Landkarte.
function displayError(ex AnyException in)
DojoDialogLib.showError("Google Service",
"Cannot invoke Google Places service: " + ex.message, null);
end
DojoDialogLib ist ein Bibliotheksabschnitt im Projekt com.ibm.egl.rui.dojo.samples, das Sie in Lerneinheit 2 zu Ihrem Arbeitsbereich hinzugefügt hatten. Die Funktion showError in dieser Bibliothek zeigt in einem Dialogfenster Informationen an. Der Funktionsaufruf umfasst eine Zeichenfolge namens message. Dies ist der Ausnahmedatensatz, den der EGL-Laufzeitcode an die Funktion displayError übergibt.
Da dieses Portlet unabhängig funktioniert, können Sie es separat testen.

localMap.removeAllMarkers();
In der nächsten Lerneinheit betten Sie den neuen Handler in die Anwendung ein.