2015-08-26 5 views
0

First.mxml - Содержит DateField управления следующим образом:Flex - Проблемы доступа к статической переменной на другой странице MXML

<mx:DateField id="G2_CRTLoadDate" width="150" selectedDate="{modelProxy.G2_CRTLoadDate}" change="{modelProxy.G2_CRTLoadDate = event.currentTarget.selectedDate;changeManagerStatus()}"/> 

Я назначая это значение DateField к статической переменной CERT_LOAD_DATE следующим образом (First.mxml):

[Bindable] 
public static var CERT_LOAD_DATE:String = ""; 
private function changeManagerStatus():void 
{ 
CERT_LOAD_DATE = G2_CRTLoadDate.selectedDate.toDateString(); 
} 

Se cond.mxml -Вот, у меня есть выпадающий следующим образом:

<mx:ComboBox id="General_Release_Dates" 
      selectedItem="{modelProxy.General_Release_Dates}" 
      valueCommit="{model.General_Release_Dates = event.currentTarget.selectedItem;updateReleaseDate(event)}" 
      change="{model.General_Release_Dates = event.currentTarget.selectedItem;updateReleaseDate(event)}" close="closeHandler(event);" includeInLayout="true" visible="true"> 
</mx:ComboBox> 

Внутри функции closeHandler, я пытаюсь получить доступ к переменной CERT_LOAD_DATE следующим образом:

private function closeHandler(evt:DropdownEvent):void { 
    var CurrentDate:Date = new Date(); 
    if(General_Release_Dates.selectedLabel.toString() == "TBD") 
    {   
     Alert.show(First.CERT_LOAD_DATE); 
    } 
} 

в поле предупреждения не отображается значение (null). Пожалуйста помоги.

+0

Каков порядок создания для этих MXML? Вы пытались установить точку останова на 'CERT_LOAD_DATE = G2_CRTLoadDate.selectedDate.toDateString();' и проверить, какое значение назначается? Являются ли эти MXML добавленными при проверке? Когда вы пытаетесь получить к нему доступ в Second.mxml? Поместите несколько подробностей. –

+0

Я попытался отобразить значение CERT_LOAD_DATE в окне предупреждения после назначения и отображает ожидаемое значение (First.mxml). –

+0

@GurtejSingh Я отредактировал мой вопрос, чтобы включить более подробную информацию. Пожалуйста, посмотрите. В основном, порядок доступа - Second.mxml -> First.mxml. –

ответ

1

Я не могу выяснить связь между First.mxml и Second.mxml вашего вопроса. Однако следующий код не может получить доступ к First.mxml.

Alert.show(First.CERT_LOAD_DATE); 

Потому что «Первый» - это не тот же экземпляр, что и загруженный «First.mxml».

Как насчет использования singleton? Он доступен из любого места.
1-й, добавьте класс MySingleton.as, как этот.

package foo.bar 
{ 
    public class MySingleton 
    { 
     private var _cert_load_date:String; 

     public function MySingleton(internally:SingletonInternal) 
     { 
      super(); 
      if(internally == null) 
      { 
       throw new Error("Please use getInstance() method."); 
      } 
     } 
     public static function getInstance():MySingleton 
     { 
      return SingletonInternal.instance; 
     } 

     public function set cert_load_date(value:String):void 
     { 
      _cert_load_date = value; 
     } 

     public function get cert_load_date():String 
     { 
      return _cert_load_date; 
     } 
    } 
} 
import foo.bar.MySingleton; 

class SingletonInternal{ 
    public static var instance:MySingleton 
     = new MySingleton(new SingletonInternal()); 
    public function SingletonInternal(){} 
} 

Как использовать

Установить значение в First.mxml.

public var singleton: MySingleton = MySingleton.getInstance(); 
private function changeManagerStatus():void 
{ 
    singleton.cert_load_date = G2_CRTLoadDate.selectedDate.toDateString(); 
} 

Second.mxml

public var singleton: MySingleton = MySingleton.getInstance(); 
private function closeHandler(evt:DropdownEvent):void { 
    var CurrentDate:Date = new Date(); 
    if(General_Release_Dates.selectedLabel.toString() == "TBD") 
    {   
     Alert.show(singleton.cert_load_date); 
    } 
} 

Обновлено: 27 августа 10:00 (JST)

Я думаю, что есть два способа изменить элемент First.mxml, используя синглтон.

1) Связывание значения DateField с одиночными переменными и очистка значения в файле Secend.mxml.
2) Назначьте одиночные переменные целиком «Первый» и управляйте из Second.mxml.

Я напишу здесь 2-й способ. Если вы используете этот способ, все можно контролировать из Second.mxml.

MySingleton.as

private var _first:Object; 

public function set first(value:Object):void 
{ 
    _first = value; 
} 

public function get first():Object 
{ 
    return _first; 
} 

First.mxml

singleton.first = this; 

Второй.mxml

public function something(): void{ 
    First(singleton.first).G2_CRTLoadDate.selectedDate = null; 

    // The cast is unnecessary. Following code also works. 
    // singleton.first.G2_CRTLoadDate.selectedDate = null; 
} 

Также вы можете выполнить публичную функцию First.mxml из Second.mxml.

singleton.first.someFunctionDefinedAtFirst(); 
+0

Большое спасибо. Работает для меня :) –

+0

У меня был другой вопрос, похожий на этот. Предположим, я хочу очистить значение «DateField» (First.mxml) от другого файла (Second.mxml). Как мы можем использовать singleton в этом сценарии? –

+0

Uno Спасибо еще раз :) –

 Смежные вопросы

  • Нет связанных вопросов^_^