2013-07-09 17 views
2

Flex仍然很新。我試圖將Google Maps JavaScript API合併到我的Flex應用程序中,同時通過ColdFusion從數據庫中提取標記數據。使用ColdFusion CFC和SQL Server獲取地址的Flex應用程序中的Google Maps JavaScript API

應用程序應該拉出所有參加特定學校的學生,然後通過地圖上的標記顯示學生。這也應該顯示學校,但我還沒有得到。

我寫了大部分內容,但是我被卡在最終可能變成簡單部分的東西上。我創建了地圖,並且我有CFC拖動座標數據,但是當我嘗試將數據返回到動作腳本頁面時出現錯誤。

我得到「從getGeoInfo函數返回的值不是類型查詢。」我意識到也許我使用了錯誤的returntype,但我不確定還有什麼其他用途。

以下是CFC返回的示例。

28.5980179,-81.3651601;28.5383355,-81.3792365 

這裏是我用於獲取地理位置動作功能:

/** getGeoInfo 
* get the Geographical Data 
* 
* @param void 
* @return void 
*/ 

private function getGeoInfo():void 
{ 
    try 
    { 
     var myArgs:Object = new Object; 
     /* myArgs.column_list = "GeoCode, Student_Address, Student_Name_First, Student_Name_Last"; */ 
     remotingDelegate.callCFC("getGeoInfo", myArgs); 
    } 

    catch (error:Error) 
    { 
     FlexException.errorHandler(error, "StudentPopMapModuleCode:getGeoInfo"); 
    } 
} 


/** 
* getGeoInfo_Handler 
* The handler of the remoting call  
* @param Object results The results of the remoting call 
* @return void 
*/ 

public function getGeoInfo_Handler(results:ArrayCollection):void 
{ 
    try 
    { 
     geoInfoAC = results; 
    } 

    catch (error:Error) 
    { 
    FlexException.errorHandler(error, "StudentPopMapModuleCode:getGeoInfo_Handler"); 
    } 
} 

這裏是MXML頁面上的代碼,以獲得座標:

public function onMapReady(event:MapEvent):void { 
    map.setCenter(new LatLng(37.4419, -122.1419), 13, MapType.NORMAL_MAP_TYPE); 
    for each (var o:Object in geoInfoAC){ 
     var md:MarkerData = o["markerData"] as MarkerData; 
     var latlng:LatLng = new LatLng(md.lat,md.lng); 
     var marker:Marker= new Marker(latlng); 
     addMarker(md,marker); 
    } 
} 

public function addMarker(markerData:MarkerData, marker:Marker):void{ 
    var o:Object = {markerData:markerData,marker:marker}; 
    marker.addEventListener(MapMouseEvent.CLICK,markerClicked); 
    marker.addEventListener(InfoWindowClosedEvent.NAME,closed); 
    markerData.marker = marker; 
    map.addOverlay(marker); 
    dataProvider.addItem(o); 
    dataProvider.refresh(); 
} 

public function closed(event:InfoWindowClosedEvent):void{ 
    var marker:Marker = event.marker; 
    var latLng:LatLng = marker.getLatLng(); 
    var markerData:MarkerData = new MarkerData(latLng.lat(),latLng.lng()/* ,event.inputName */); 
    var o:Object = MapUtils.getMarkerDataByLatAndLng(latLng.lat(),latLng.lng(),dataProvider); 
    if (o == null){ 
     addMarker(markerData,marker); 
    }else{ 
     o["markerData"] = markerData; 
    dataProvider.refresh(); 
    } 
} 

任何幫助將是不勝感激。

+0

我可能錯過了一些東西,但getGeoInfo不返回任何東西 – Glitcher

+0

getGeoInfo被遠程調用getGeoInfo.cfc並返回一個叫做的getInfo VAR與查詢及的28.5980179值,-81.3651601的返回類型; 28.5383355,-81.3792365 。 不幸的是,我的程序需要一個ArrayCollection,它不能將28.5980179,-81.3651601; 28.5383355,-81.3792365轉換爲AC,但我不確定要使用什麼返回類型以及如何相應地更新處理程序。 – Vegeta

+0

我改變了返回類型爲String現在的功能處理程序是: \t公共職能getGeoInfo_Handler(結果:字符串):無效 這似乎已經解決了這一錯誤,但我不知道爲什麼MXML頁面上的功能沒有拿起getInfoAC。 – Vegeta

回答

0

原來,因爲它被視爲一個字符串,我需要按每個座標拆分數組。我用了以下,它工作。

處理程序被更新爲:

public function getGeoInfo_Handler(results:String):void { 
try { geoInfoAC = new ArrayCollection(results.split(";")); 

那麼實際的MXML頁面上我用:

public function onMapReady(event:MapEvent):void { 
map.setCenter(new LatLng(28.5383355,-81.3792365), 11, MapType.NORMAL_MAP_TYPE); 
for each (var o:Object in geoInfoAC){ 
var latlngArray:Array = o.split(","); 
var md:MarkerData = new MarkerData(latlngArray[0],latlngArray[1]); 
var latlng:LatLng = new LatLng(md.lat,md.lng); 
var marker:Marker= new Marker(latlng); addMarker(md,marker); 

希望這可以幫助別人。

相關問題