2012-02-06 58 views
0

嗨,我一直在使用Flash Builder 4.6開發Flex Mobile應用程序。如何在使用Flex的視圖之外訪問公共職能?

我在我的項目中有2個mxml'views'。在一個mxml文件中,我有一個可以獲取xml數據的函數。 在我的其他mxml文件中,我有一個刷新按鈕,當鬱悶的時候可以調用第一個mxml文件中的函數,以便再次獲取xml數據。 我不知道如何從它所在的mxml文件之外調用該函數。

我非常感謝任何幫助。謝謝!

[更新#2] *

我想我應該分享一下我的問題的更多細節。

  1. 這是一個reddit客戶端的移動應用程序。它獲取飼料等
  2. 在我的主視圖稱爲RedditReaderHomeView.mxml,我使用的是splitViewNavigator Spark組件容納像這樣其他兩種觀點:

RedditReaderHomeView.mxml

<s:SplitViewNavigator width="100%" height="100%" id="splitViewNavigator" autoHideFirstViewNavigator="true"> 
     <s:ViewNavigator id="redditList" firstView="views.subredditList" width="300" height="100%"/> 
     <s:ViewNavigator id="redditFeed" firstView="views.redditFeed" width="100%" height="100%"> 

      <s:actionContent.landscape> 
       <s:Button id="refreshButtonlLandscape" icon="@Embed('assets/refresh160.png')" click="refreshRSS()" /> 
      </s:actionContent.landscape> 

      <s:actionContent.portrait> 
       <s:Button id="refreshButton" icon="@Embed('assets/refresh160.png')" /> 
       <s:Button id="navigatorButton" label="Search" click="splitViewNavigator.showFirstViewNavigatorInPopUp(navigatorButton)" /> 
      </s:actionContent.portrait> 
     </s:ViewNavigator> 
    </s:SplitViewNavigator> 
  1. 正如你可以在上面的代碼中看到的,在我的主視圖中,我有一個ID爲「refreshButton」的按鈕。當我點擊這個按鈕時,我想要刷新reddit數據。換句話說,我想調用一個函數來刷新數據,它位於視圖'redditFeed'中。
  2. 這是一個名爲'redditFeed.mxml'的獨立視圖中的函數,我想使用上面顯示的主視圖中的刷新按鈕進行調用。

redditFeed.mxml

protected function myList_creationCompleteHandler(url:String):void 
      { 

       getRedditFeedResult.token = redditFeedGrabber.getRedditFeed(url); 
       getRedditFeedResult.addEventListener(ResultEvent.RESULT,busyOff); 

      } 

我希望這有助於明確了混亂,我試圖做的。我假設解決方案很簡單,但唉,我是一個新手程序員,也是Flex的新手,所以我正在學習繩索。任何幫助表示讚賞。謝謝!

+0

您的代碼不清楚。您的SplitViewNavigator與上面的函數來自或不是的myList組件在相同的文件中?它看起來不是自己的MXML文件的根標籤,因爲它沒有名稱空間聲明。你可以發佈一個更大的代碼塊來顯示關係嗎? – 2012-02-07 13:27:21

+0

好吧,我澄清了一點。讓我知道如果你需要更多,我只是不想混亂的帖子太多的代碼。 – 2012-02-08 00:05:04

+0

謝謝你們對此的幫助。我現在已經開始工作了,但是我遇到了一個新問題,我剛剛提交了一個新問題。可能你們中的一個也許能夠幫助我呢?再次感謝您支持我的業餘愛好,真的很感激! – 2012-02-09 04:31:04

回答

1

如果你有看法的一個實例,然後就去做:

myViewInstance.myPublicFunction(); 

在MXML,MXML標籤的id元素被用來引用ActionScript中的視圖。既然你沒有描述你的架構,目前還不清楚一種觀點如何稱呼另一種觀點。

如果需要觸發該調用的視圖是具有調用功能的視圖的父視圖,則可以使用上述方法。

如果需要觸發調用的視圖是具有調用函數的視圖的子視圖,那麼您應該從父視圖可以監聽的「子視圖」派發事件。在事件處理程序中,您將觸發該呼叫。

如果需要觸發的視圖和具有打電話功能的視圖都是同一父項的子項,那麼你應該從「觸發器」視圖派發一個事件,在父代中監聽它,然後使用該事件監聽器進行調用(使用類似的代碼來解釋上面的內容)。

如果您有更復雜的這兩個視圖的體系結構;那麼你應該研究一些方法來封裝「遠程調用」功能,例如將其封裝到服務類中。許多框架提供了在多個類中共享該服務類和/或結果的方法。 (MXML文件是類)。

+0

好吧......我會向你描述我的建築或許。我有我的主視圖。在這個視圖中,我有2個視圖被嵌入到分割視圖導航中。所以主視圖有2個意見,如果你得到我的意思。我所談到的兩個觀點是上面提到的主要觀點,以及其中的一個觀點。其中的一個是包含函數的視圖,我需要在主視圖的mxml文件中調用該函數。基於此,你能否描述我將如何「派遣」一項活動?我是一名年輕的程序員,剛接觸flex。儘管非常感謝你的回覆。 – 2012-02-06 02:46:08

+0

分享一些代碼。可能編輯您的問題也包括層次結構的描述。如果主視圖需要訪問其中的一個孩子,請使用我在代碼中描述的方法作爲我的答案的一部分。事件總是在層次結構中調度,永遠不會下降。 – JeffryHouser 2012-02-06 13:15:47

+0

好的,我可以使用上面的原始代碼來工作。雖然我不清楚你'myViewInstance'所指的是什麼,但我不知道一個對象的實例只是它的id。不過謝謝你。此外,我會upvote您的帖子,但我沒有這樣做的聲譽。 – 2012-02-09 04:28:15

0

有兩種方法可以做到這一點沒有進入壞架構通過讓子視圖明確地知道它的父:

  1. 你的孩子視圖可以產生一個事件,它的母公司正在偵聽。父母然後將調用函數
  2. 子視圖可以有一個Function類型的公共屬性。父視圖通過設置變量來傳遞該函數的引用。子視圖然後調用該函數(檢查後確保它不爲空)。
+0

以上更新,請你重新分析我的問題,並希望告訴我我該怎麼做?謝謝! – 2012-02-06 23:57:32