如何在使用Flex的视图之外访问公共功能?

时间:2012-02-06 02:01:26

标签: flex function views mxml

您好,我一直在使用Flash Builder 4.6开发Flex Mobile应用程序。

我的项目中有2个mxml'views'。在一个mxml文件中,我有一个抓取xml数据的函数。 在我的另一个mxml文件中,我有一个刷新按钮,当按下时,它被调用来调用第一个mxml文件中的函数,以便再次获取xml数据。 我不知道如何从它所在的mxml文件外部调用该函数。

我感谢任何帮助。谢谢!

[更新#2] *

我想我应该分享一些关于我的问题的更多细节。

  1. 这是一个reddit客户端移动应用。它会提取Feed等。
  2. 在我的主视图RedditReaderHomeView.mxml中,我使用splitViewNavigator spark组件来容纳其他两个视图:
  3. 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'的单独视图中的函数,我想使用上面显示的主视图中的刷新按钮调用。
    3. redditFeed.mxml

          protected function myList_creationCompleteHandler(url:String):void
                  {
      
                      getRedditFeedResult.token = redditFeedGrabber.getRedditFeed(url);
                      getRedditFeedResult.addEventListener(ResultEvent.RESULT,busyOff);
      
                  }
      

      我希望这有助于清除我想要做的事情的混乱。我假设解决方案非常简单,但唉,我是一个新手程序员,刚接触Flex,所以我正在学习绳索。任何帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

如果你有一个视图实例,那么就这样做:

myViewInstance.myPublicFunction();  

在MXML中,MXML标记的id元素用于在ActionScript中引用视图。既然你没有'描述你的建筑;目前还不清楚一种观点如何能够调用另一种观点。

如果需要触发调用的视图是具有调用功能的视图的父视图,那么您可以使用上述方法。

如果需要触发调用的视图是具有调用函数的视图的子视图,那么您应该从父级可以侦听的“子级”调度事件。在事件处理程序中,您将触发调用。

如果需要触发的视图和具有调用功能的视图都是同一父节点的子节点;然后你应该从“触发器”视图调度一个事件,在父节点中监听它,然后使用该事件监听器进行调用(使用与我上面解释的类似的代码)。

如果你有这两种观点的更复杂的架构;那么你应该研究一些方法来封装“远程调用”功能,比如封装到服务类中。许多框架提供了跨多个类共享该服务类和/或结果的方法。 (MXML文件是类)。

答案 1 :(得分:0)

通过让子视图明确了解其父视图,有两种方法可以做到这一点而不会进入糟糕的体系结构:

  1. 您的子视图可以生成父级正在侦听的事件。然后父母将调用函数
  2. 子视图可以具有Function类型的公共属性。父视图通过设置变量传递对该函数的引用。子视图然后调用该函数(在检查之后确保它不为null)。