выдвинуть представление из класса actionscript - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть класс remoteobject, который обрабатывает все интерактивные с моей удаленной службой данных.Каждый раз, когда выполняется вызов, служба данных проверяет, что у пользователя есть действительный сеанс.если они этого не сделают, он не запустит запрошенный метод и вернет ошибку.Я могу зафиксировать эту ошибку в обработчике ошибок.Что я хочу сделать, если это произойдет, это нажать на экран входа в систему пользователю.

Я пробовал следующее

            var navigator:ViewNavigator;
            navigator.activeView.navigator.pushView(views.LoginScreen);

Но это не работает и не удается с Не удается получить доступ к свойствуили метод нулевой ссылки на объект.что имеет смысл.поэтому мой вопрос заключается в том, как я могу получить ссылку на текущий запущенный объект навигатора представления и выдвинуть представление?

Спасибо

Как запрошено здесь, это полный класс удаленного объекта

пакет удаленного взаимодействия {import events.RemoteExceptionEvent;

import flash.events.*;

import mx.managers.CursorManager;
import mx.messaging.ChannelSet;
import mx.messaging.channels.AMFChannel;
import mx.rpc.events.FaultEvent;
import mx.rpc.remoting.RemoteObject;

import spark.components.ViewNavigator;

import views.FirstTime.ValidateUser;

/**
 * Super class for all remote services that contains some generic methods.
 */
public class RemoteService extends EventDispatcher

{
    private static var REMOTE_EXCEPTION:String = "Remote exception";
    private static var NO_MESSAGE:String = "10001";

    protected var remoteObject:RemoteObject;

    private var amfChannelSet:ChannelSet;

    /**
     * Constructor accepting an id and destination for the actual RemoteObject to create. An event listener
     * is added for exceptions.
     * @param id String representing the id of the new RemoteObject to create
     * @param destination String representing the destination of the RemoteObject to create
     * @param amfChannelId String representing the Channel of the RemoteObject to create
     * @param amfChannelEndpoint String representing the Endpoint URI of the RemoteObject to create
     */
    public function RemoteService( serviceId:String
                                   , serviceDestination:String
                                     , amfChannelId:String
                                       , amfChannelEndpoint:String
    ) 
    {
        // Create a runtime Channelset for given Channel ID and Endpoinr URI
        var amfChannel:AMFChannel = new AMFChannel(amfChannelId, amfChannelEndpoint);
        amfChannelSet = new ChannelSet();
        amfChannelSet.addChannel(amfChannel);

        // Create the remoteObject instance
        this.remoteObject = new RemoteObject(serviceId);
        this.remoteObject.channelSet = amfChannelSet;
        this.remoteObject.destination = serviceDestination;
        this.remoteObject.addEventListener(FaultEvent.FAULT,onRemoteException);
        this.remoteObject.setCredentials('test','test');

    }

    /**
     * generic fault event handler for all remote object actions. based on the received message/code an action
     * is taken, mostly throwing a new event.
     * @param event FaultEvent received for handling
     */
    public function onRemoteException(event:FaultEvent):void {
        trace('code : ' + event.fault.faultCode +
            ', message : ' + event.fault.faultString +
            ',detail : ' + event.fault.faultDetail);

            trace('fodun: ' + event.fault.faultDetail.indexOf("Authentication"));

        if (event.fault.faultDetail.indexOf("Authentication") > 0)
        {

            var navigator:ViewNavigator;

             navigator.activeView.navigator.pushView(views.LoginScreen);



        }
        else  if (event.fault.faultString == REMOTE_EXCEPTION) {
            EventDispatcher(
                new RemoteExceptionEvent(RemoteExceptionEvent.REMOTE_EXCEPTION,
                    "unknown problem occurred during a remote call : " + event.fault.message));
        } else if (event.fault.faultCode == NO_MESSAGE) { 
            EventDispatcher(
                new RemoteExceptionEvent(RemoteExceptionEvent.REMOTE_EXCEPTION,
                    event.fault.faultString));
        } else {

            EventDispatcher((
                new RemoteExceptionEvent(RemoteExceptionEvent.REMOTE_EXCEPTION,
                    "unknown runtime problem occurred during a remote call : " + event.fault.message)));
        }
    }
}
}

1 Ответ

0 голосов
/ 16 ноября 2011

Доступ к вашему представлению или к любым визуальным компонентам из класса RemoteService не является хорошим способом работы с приложениями MVC. Что вы хотите сделать, это отправить событие в вашем классе RemoteService, которое в основном говорит: «аутентификация не удалась». Затем, по вашему мнению, вы будете слушать это событие и интерпретировать его как необходимость отображения экрана входа в систему. Видишь?

...