2014-11-12 7 views
0

У меня есть приложение Flex, использующее ColdFusion для извлечения данных из MS SQL. Я пытаюсь создать класс, где я могу отправить числовой аргумент, и он возвращает значение для документа, вызывающего класс.Возврат результатов из класса remoteobject в родительский

Это мой класс

package com.procost 
{ 
import mx.controls.Alert; 
    import mx.core.FlexGlobals; 
    import mx.rpc.AbstractOperation; 
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.remoting.RemoteObject; 

    public class EmailListRetrieve 
    { 
     public var emailListId:Number = -1; 

     public function send():void{ 
      //Create the remote object 
      var _remoteObject:RemoteObject = new RemoteObject('test'); 
      _remoteObject = new RemoteObject("ColdFusion"); 
      _remoteObject.endpoint = "http://" + FlexGlobals.topLevelApplication.endPointLink + "/flex2gateway/"; 
      _remoteObject.source = FlexGlobals.topLevelApplication.remotePath + "services.general"; 
      _remoteObject.showBusyCursor = true; 

      //Send 
      var op:AbstractOperation = _remoteObject.getOperation('getEmailList'); 
      op.addEventListener(ResultEvent.RESULT, result); 
      op.send(this); 
     } 

     // Result from CFC 
     private function result(event:ResultEvent){ 
      Alert.show(event.result.toString()); 
     } 
    } 
} 

** Это, как я звоню его из моего MXML **

import com.procost.EmailListRetrieve;  

public function fncClick():void{ 
     var request:EmailListRetrieve = new EmailListRetrieve(); 
     request.emailListId=1; 
     request.send(); 
    } 

Функция результат в моем классе возвращает все данные Мне нужно от БД. Проблема в том, как мне вернуть эти данные в документ MXML, на который я его вызвал?

Любая помощь будет оценена по достоинству.

+0

Не могли бы вы рассказать нам больше об этом документе? –

+0

Документ не является правильным термином здесь (должен быть другим классом), просто отправляйте пользовательское событие и передавайте данные. Кроме того, поскольку вы говорите по-английски «как я могу это», это не имеет никакого смысла грамматически. – BotMaster

+0

@Dan Документ (неправильный термин, указанный в качестве указателя), является моим файлом MXML, в котором я импортирую класс, используя ... import com.procost.EmailListRetrieve; затем вызывая его, используя функцию, показанную в fncClick fuction в исходном сообщении. –

ответ

0

Все, что вам нужно сделать, это повторить данные из ResultEvent в другом случае (обратите внимание, что вы хотите пользовательский класс событий для переноса данных):

public class EmailListRetrieve extends EventDispatcher 
{ 
    public static const DATA_READY:String = "dataReady"; 
    //The rest of the class is unchanged 

    private function result(event:ResultEvent){ 
     Alert.show(event.result.toString()); 
     dispatchEvent(new MyDataEvent(DATA_READY, event.result.toString())); 
    } 
} 

Затем в коде MXML:

import com.procost.EmailListRetrieve;  

public function fncClick():void{ 
    var request:EmailListRetrieve = new EmailListRetrieve(); 
    request.emailListId=1; 
    request.send(); 
    request.addEventListener(EmailListRetrieve.DATA_READY, onListReady); 
} 

public function onListReady(e:MyDataEvent):void { 
    var importantData = e.data; 
    //Pass importantData to whatever needs to display it in your MXML 
} 

Важно: Ваш requestEmailListRetrieve объект может в конечном итоге получить мусора, прежде чем вы получите ответ. Я рекомендую сохранить ссылку на него в переменной уровня класса в вашем MXML вместо того, чтобы быть членом функции.

0

Вы можете использовать Responder для отправки данных обратно в основной класс.

public class EmailListRetrieve 
    { 
    ..... 
    public var callback:IResponder; 
    .....   
    // Result from CFC 
    private function result(event:ResultEvent){ 
     //Alert.show(event.result.toString()); 
     if(callback) 
      callback.result(event.result); 
    } 
    /// you can do the same with FaultEvent 
    // Fault from CFC 
    private function fault(event:FaultEvent){ 
     //Alert.show(event.fault.faultString); 
     if(callback) 
      callback.fault(event.fault); 
    } 

главный класс

protected function fncClick():void{ 
    var request:EmailListRetrieve = new EmailListRetrieve(); 
    request.callback = new mx.rpc.Responder(onResult, onFault); 
    request.emailListId=1; 
    request.send(); 
} 

protected function onResult(item:Object):void{ 
    trace(item); 
} 

protected function onFault(item:Object):void{ 
    Alert.show(item, "Error"); 
}