lookupService YahooLocalService{@restbinding};
@restbinding 属性指示服务访问详细信息位于代码中而不是位于 EGL 部署描述符中。很容易作出决策,但是不可改变。更改服务位置将要求您更改源代码。第 14 课中介绍了 EGL 部署描述符,您很可能将服务访问详细信息放在大多数开发工作中。
function checkForEnter(event Event in)
if(event.ch == 13)
search();
end
end
考虑以下背景详细信息:EGL 运行时代码将调用 checkForEnter 函数并传递事件对象,事件对象是包括有关该事件的详细信息的内存结构。在这种情况下,导致进行此调用的事件是 onKeyDown,并且事件对象包括用于表示用户的击键的 ASCII 字符。具体来说,数字 13 是 ASCII 表中的回车符(ENTER 键)的十进制值,如以下位置所述:ASCII 表和描述 (http://www.asciitable.com)。
仅当焦点位于文本字段上并且用户按诸如 Tab 键或 ENTER 键时,才会调用 checkForEnter 函数。仅当按 ENTER 键时,此函数又会调用 search 函数。您马上就会创建 search 函数。
function buttonClicked(event Event in) search(); end
buttonClicked 函数及其与特定于按钮的 onClick 属性的关系可确保用户单击 Search 按钮时就会调用 search 函数。
function search()
localMap.zoom = 13;
// show an initial marker, as necessary to display the map at all
// (the marker identifies only the zip code)
localMap.addMarker(new MapMarker
{address = zipField.text, description = "zipcode: " + zipField.text});
// Call the remote Yahoo! service, passing the zip code
call lookupService.getSearchResults("YahooDemo", zipField.text)
returning to showResults onException displayError;
end
在特定邮政编码所代表地区的此初始屏幕上,您为 localMap.addMarker() 函数提供的唯一详细信息就是该邮政编码本身。稍后,您将设置 address 属性以提供更多详细信息,用来显示特定于地址的标记。
function showResults(retResult ResultSet in)
linkListing HyperLink[0];
for(i INT from 1 to retResult.result.getSize() by 1)
newLink HyperLink{padding = 4, text = retResult.result[i].title, href = "#"};
newLink.setAttribute("address", retResult.result[i].Address + ", "
+ retResult.result[i].city + ", " + retResult.result[i].state);
newLink.setAttribute("title", retResult.result[i].Title);
newLink.onClick ::= mapAddress;
linkListing.appendElement(newLink);
end
listingBox.setChildren(linkListing);
end
newLink HyperLink{padding = 4, text = retResult.result[i].title, href = "#"};
超链接将导致调用代码而不是 Web 地址。但是,存在占位符可确保超链接以熟悉的方式来显示文本(即,使用下划线和颜色来显示),就像用户单击超链接将打开 Web 站点一样。
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;
localMap.addMarker(new MapMarker {
address = businessAddress,
description = businessName} );
end
当用户在运行时单击此超链接时,mapAddress 函数将检索在 showResults 函数中设置的属性并在所显示的地图上设置标记。
function displayError(ex AnyException in)
DojoDialogLib.showError("Yahoo Service",
"Cannot invoke Yahoo Local Service: "
+ ex.message, null);
end
DojoDialogLib 是您在第 2 课中添加至工作空间的 com.ibm.egl.rui.dojo.samples 项目中的一个库部件。该库中的 showError 函数将在对话框中显示信息。函数调用中包括一个名为 message 的字符串,它位于 EGL 运行时代码传递给 displayError 函数的异常记录中。
因为此 Portlet 独立运行,所以您可以单独对其进行测试。
10001此邮政编码代表位于市中心区的曼哈顿。

以下位置可能报告了 Yahoo! Local Search Service 存在的问题:位于以下网址的“本地 API - 一般问题”:http://developer.yahoo.net/forum。
localMap.removeAllMarkers();
在下一课中,您将在应用程序中嵌入新的处理程序。