2014-04-28 171 views
0

我得到的數據的方式是通過一個回調函數[processclinicResults],如何通過函數內部的回調函數返回值?

,它給該陣列收集爲值對象_ClinicVO。 enter image description here

我有,我不能直接打通getTableContent函數的返回ArrayCollection的一個問題,我試過後

enter image description here

返回值,但它返回null。

有誰知道如何讓它容易獲得數組? 我只是不想每次使用類似的funciotn時都聲明變量。或者我必須覆蓋[clinicData]?

public function getTableContent(resultHandler:Function, faultHandler:Function = null):void 
{ 
    var stmt:SQLStatement = new SQLStatement(); 
    stmt.sqlConnection = sqlConnection; 
    stmt.text = 'SELECT * FROM Clinic;'; 
    stmt.itemClass = ClinicVO; 
    stmt.addEventListener(SQLEvent.RESULT, 
    function (event:SQLEvent):void { 
     resultHandler.call(this, new ArrayCollection(stmt.getResult().data)); 
    }); 
    stmt.addEventListener(SQLErrorEvent.ERROR, faultHandler == null ? sqlErrorHandler : faultHandler); 
    stmt.execute(); 
} 

public function errorConnectingToTable(evt:SQLErrorEvent):void { 
    trace("Error getting information from DB"); 
} 

protected function processClinicResults(resultsArray:ArrayCollection=null):void { 
    if (resultsArray == null) { 
     trace("DB has NO data"); 
    //there is no data 
    } else { 
     clinicData = resultsArray; 
    } 
} 
+0

因爲你的回調是異步的(你在'stmt'上使用'addEventListener',這意味着這一點),你不能直接通過返回值這樣的電話。我想你應該運行查詢服務器端,通過'URLRequest'請求它們並處理那裏的錯誤。 – Vesper

+0

我使用Adobe Air做跨平臺的任務,數據庫和應用程序都在同一個設備上。早期版本就像你說的那樣 - 在視圖部分上運行查詢,並且存在它太複雜的缺點。所以我使用[DAO-EXT](https://code.google.com/p/dao-ext/),我可以使用MVC模式使我的代碼更加模塊化,但它顯然面臨着另一個問題,儘管... – Pao

回答

0

我可以建議你使用Flex ORMresponders獲得訪問本地數據庫和我一樣:

private var entityManager:EntityManager = EntityManager.instance;  
public var LocalDBSqlConnection:SQLConnection;  
LocalDBSqlConnection = new SQLConnection(); 
LocalDBSqlConnection.open(LocalDBFile); 
public function loadClinic(responder:IResponder):void 
    {      
     var clinics:Array = entityManager.query("SELECT * FROM Clinic") as Array; 
     responder.result(new ArrayCollection(clinics));         
    } 

某處稱之爲:

loadClinic(new mx.rpc.Responder(onResult, onError)); 

Handelers:

private function onResult(data:Object):void 
     { 
      YourData = data as ArrayCollection;       
     } 
private function onError(info:Object):void 
     { 

     } 

對不起,如果它不是你正在serching的方式=)

+0

感謝您的回覆,所以我可以在loadClinic函數中返回診所數組嗎?我不確定響應者是否是一種回調函數。 – Pao