2012-06-25 1 views
0

Как запросить подтверждение пользователя перед тем, как выделить/перейти на другую панель/страницу?Flex: как запросить предупреждение перед переходом на любую другую страницу

У меня мало панелей на экране. Каждая панель имеет множество элементов управления. Я хотел бы запросить окно сообщения (или оповещения) кнопками «ОК» и «Отмена» и получить подтверждение, когда пользователь нажимает на другую панель.

Если пользователь нажимает кнопку «ОК», перейдите на другую панель/страницу. Если пользователь нажимает кнопку «Отмена», то удалите предупреждение и сфокусируйтесь на той же панели.

В настоящее время я реализовал это с использованием события focus_out панели (focusOutHandler (event: FocusEvent)). Я нажимаю на кнопку, которая находится в другой панели, теперь я получил предупреждение, но когда я нажал на кнопку «OK» в боевой готовности, ничего не происходит (нажатие кнопки является событие не выпустили)

Спасибо заранее

+2

Вставить некоторые примеры кода ... который родительский контейнер, который вы используете Ex: - ViewStack, TabNavigator ... и т.д .. –

+0

самый верхний родительский элемент VGroup. Он имеет такие элементы, как HGroup, Tab navigator, Panels. –

+0

Создайте образец и вставьте ... чем только мы можем помочь ... –

ответ

0

Из звуков, которые вы хотите отреагировать, в зависимости от того, какая кнопка нажата на кнопку оповещения?

Если это так, используйте встроенный обработчик закрытия в Alert class.

класса

настороже имеет статический метод шоу, со следующей подписью:

public static function show(text:String = "", title:String = "", flags:uint = 0x4, parent:Sprite = null, closeHandler:Function = null, iconClass:Class = null, defaultButtonFlag:uint = 0x4, moduleFactory:IFlexModuleFactory = null):Alert 

Добавляя два флага с оператором трубы в flags аргументу

Alert.OK || Alert.CANCEL, а затем добавив ваш близкий обработчик в closeHandler, вы можете проверить, какая кнопка была нажата, и соответственно отреагировать.

Что-то вроде этого:

Alert: Alert.show("Alert Title","Would you like to proceed?",Alert.OK || Alert.CANCEL,this,onClose)

OnClose Функция:

private function onClose(event:CloseEvent) 
{ 
    if (eventObj.detail==Alert.OK) 
    { 
     //proceed 
    } 
    else 
    { 
     //cancel operation 
    } 
} 
+0

Спасибо за вашу помощь. Здесь нам нужно идентифицировать Button/Controls в другом контейнере, на котором пользователь нажал. Но из вашего примера мы можем определить, на какую кнопку нажали кнопку «Предупреждение» (кнопка «ОК» или «Отмена») –

0

В соответствии ваш комментарий на Джеймса пост здесь я отправляю образца, не уверен, что если вы ищете то же самое: - Надежда ниже кода может дать вам некоторую идею.

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 
      import mx.events.CloseEvent; 

      private var storeNextFocusID:String = "first"; 
      private var storePreviousFocusID:String = "first"; 

      private function firstFocus():void 
      { 
       first.setFocus(); 
       storePreviousFocusID = first.name; 
      } 

      private function showFirstTimeAlert(event:MouseEvent):void 
      { 
       if(event.currentTarget.name != storePreviousFocusID) 
       { 
        Alert.show("Do you want to change Tab?","Alert",Alert.OK|Alert.CANCEL,null,closeHandler) 
        storeNextFocusID = event.currentTarget.name; 
       } 
      } 

      private function closeHandler(event:CloseEvent):void 
      { 
       if(event.detail == Alert.OK) 
       { 
        var focusCont:HGroup = mainContainer.getChildByName(storeNextFocusID) as HGroup; 
        focusCont.setFocus(); 
        storePreviousFocusID = storeNextFocusID; 
       } else 
       { 

       } 
      } 
     ]]> 
    </fx:Script> 
    <s:VGroup id="mainContainer" x="50" y="50" width="400" height="300" creationComplete="firstFocus()"> 
     <s:HGroup id="first" name="first" width="100%" height="100%" click="showFirstTimeAlert(event)"> 
      <mx:TabNavigator width="100%" height="100%"> 
       <mx:VBox label="left"> 
        <mx:Label text="labelPlacement = 'left'" /> 
       </mx:VBox> 
       <mx:VBox label="right"> 
        <mx:Label text="labelPlacement = 'right'" /> 
       </mx:VBox> 
      </mx:TabNavigator> 
      <s:Panel width="100%" height="100%"> 
      </s:Panel> 
     </s:HGroup> 

     <s:HGroup id="second" name="second" width="100%" height="100%" click="showFirstTimeAlert(event)"> 
      <mx:TabNavigator width="100%" height="100%"> 
       <mx:VBox label="top"> 
        <mx:Label text="labelPlacement = 'top'" /> 
       </mx:VBox> 
       <mx:VBox label="bottom"> 
        <mx:Label text="labelPlacement = 'bottom'" /> 
       </mx:VBox> 
      </mx:TabNavigator> 
      <s:Panel width="100%" height="100%"> 
      </s:Panel> 
     </s:HGroup> 

    </s:VGroup> 

</s:Application>