2012-12-31 16 views
0

我使用Flex + java的..在我有兩個子MXML文件Sub1.mxml和Sub2.mxml如何將Java對象發送到java中的兩個mxml文件之間?

Sub1.mxml代碼..

[Bindable] private var editTimetableVO:TimetableVO; 
     public function forwardToCreateEvent(event:MouseEvent):void 
     { 
      editTimetableVO = new TimetableVO(); 
editTimetableVO=editDataGrid.selectedItem as TimetableVO;//editDataGrid is DataGrid id 
       Alert.show("value "+editTimetableVO.startDate); 
      } 

聽到警報是打印一些日起好......然後我的第二個MXML文件..

Sub2.mxml代碼..

public var myEditEvent:Sub1 = new Sub1(); 
private var timetableVO:TimetableVO = new TimetableVO(); 

    // private var editTimetableVO:TimetableVO = new TimetableVO(); 
     protected function init(event:FlexEvent):void 
     { 
      Alert.show("Show"); 
      timetableVO=myEditEvent.editDataGrid.selectedItem as TimetableVO; 

      Alert.show("value "+timetableVO.startDate); 

     } 

但在那個時候警報未打印.... 是他們的任何其他方式來訪問editTimetableVO在Sub1.mxml到Sub2.mxml文件...

+0

這是一個MXML文件,您正在通過ActionScript創建Sub1的新實例。這是爲什麼?我在問,因爲這可能是你問題的根源。 – RIAstar

回答

1
package 
{ 
public class ModelLocator{ 
    public static var instance:ModelLocator; 

    public var editTimetableVO:*; 

    public function ModelLocator(instance:SingletonEnforcer){} 

    public static function getInstance():ModelLocator{ 
     if(!instance){ 
      instance = new ModelLocator(new SingletonEnforcer()); 
     } 
     return instance; 
    } 
} 

}class SingletonEnforcer{} 

// sub1.mxml 
[Bindable]private var model:ModelLocator = ModelLocator.getInstance(); 
    public function forwardToCreateEvent(event:MouseEvent):void 
    { 
     model.editTimetableVO = new TimetableVO(); 
     model.editTimetableVO=editDataGrid.selectedItem as  TimetableVO;//editDataGrid is DataGrid id 
     Alert.show("value "+model.editTimetableVO.startDate); 
     } 


// Sub2.mxml 
[Bindable]private var model:ModelLocator = ModelLocator.getInstance(); 
    protected function init(event:FlexEvent):void 
    { 
     Alert.show("Show"); 
     model.timetableVO=myEditEvent.editDataGrid.selectedItem as TimetableVO; 

     Alert.show("value "+model.timetableVO.startDate); 

    } 
+0

downvote,因爲你可以用代碼編輯你的原始答案,而不是寫一個新的答案。 –

+0

的ModelLocator給錯誤: 「A在源路徑中找到文件不能有一個以上的外部可見的定義ModelLocator的; SingletonEnforcer \t ModelLocator.as。」 –

+0

三江源快速重播......但是,即使沒有表現出SUB2的任何警報。 mxml什麼是問題... –

2

嘗試創建一個ModelLocator的(單例類並在該文件把「editTimetableVO」的參考)。這樣,整個應用程序生命週期中只有一個「editTimetableVO」變量實例存在,因爲您已將此變量聲明爲Bindable,因此應用程序中任何位置發生的變化都會立即反映出來。

+0

用一些代碼解釋清楚.. –

+0

不是正確的答案:問題是Sub1實例是通過ActionScript創建的,因此'editDataGrid'可能是'null'。此外,「ModelLocator」只不過是全局變量集合的一個奇特名稱。有更清晰的方式來傳遞變量。 – RIAstar

+0

@ RIAstar- ModelLocator只是一個名字,重點是「Singleton Class」,正如我在回答中所描述的。 –

相關問題