AS3 / Flex:如何通过ViewStack加载mxml文件,看看它们的父变量等?

时间:2009-05-12 07:33:55

标签: flex actionscript-3 oop flex3

对于我在Flex工作的项目,我决定为每个可以使用的'主题'创建几个单独的文件。由于每个主题都可以并且将需要特定的代码,图像,样式和其他任何东西,因此不可能使用经典的css选项。

我对这个方法有一个问题,那就是每个'child'mxml文件都无法读取父应用程序中创建的变量等。使用Application.application解决了一半的问题,但任何类型的全局变量解决方案似乎都失败了。而且由于这个原因,代码也没有那么清晰。

我创建了一个在主应用程序中加载的类,其中包含一个静态变量,我将其用作AS3等效的全局变量。遗憾的是,无法从这些'子'mxml文件访问它,我只能重新启动该类,或者在主应用程序中编写一个包装函数来获取这些变量。这再次是完美的,但仍然没有让我使用在父应用程序中启动的类的方法。

让这种方法运作良好的最佳方法是什么?

申请表的简要说明:

1)主应用程序加载几个类/包,用适当的设置启动一些等等 2)主应用程序有一个ViewStack,每个主题都来自一个外部文件(themes / ThemeName.mxml) 3)每个主题需要访问主应用程序设置的至少2个变量(通过使用加载的类和方法),有些可能还需要直接访问主应用程序应该全局可用的某些功能,以及特定主题mxml。

我希望我的解释有点清楚。请提出任何可能有助于您了解此问题的问题。非常感谢提前!

-Dave

小更新:为了更加澄清一点:我有一个允许我轻松创建摄像机视图的课程。我在主应用程序中初始化并使用该类,然后将新的(web)cam(时代)实例放入变量中,随时可以在需要的地方使用。视图文件(themes / theTheme.mxml)然后以任何方式显示2个摄像机。我希望视图文件使用在主应用程序中创建的相机,这样我就不必要求主题创建人员一遍又一遍地实现所有这些。这是我需要这个的一个例子。

感谢您帮助我到目前为止!

3 个答案:

答案 0 :(得分:2)

来自php背景,我看到你可能出错的地方。它不像php,每个文件只是一个很大的代码,可以包含在其他php文件中。

每个mxml文件都是一个完整的Actionscript类。你不是“包括那些mxml文件”,你实际上是在主mxml类中创建属性,而这些属性的类型是“子”mxml对象。

如果你的孩子的mxml组件确实需要来自父级的一些信息,你应该将这些数据传递给它们。

但退后一点。您确定要让那些子mxml文件完成所有工作吗?他们可能只是简单的布局,其中没有任何逻辑吗?然后你可以让主mxml操纵它们。

答案 1 :(得分:1)

听起来你已经为框架做好了准备!您可以使用依赖注入在应用程序创建时设置内容。

以下是一些有助于依赖注入的框架。

  • Bifff - 允许您通过css选择器
  • 在任何视图上设置内容
  • Glue - 基于bifff的MVC框架
  • Mate - MVC框架

注意:我是Bifff和Glue的作者。

例如,使用bifff你可以说如下(在stylename =“customStyleName”的任何组件上设置“thePropertyFromMyFile”变量)

<Selector match=".customStyleName">
  <Set thePropertyFromMyFile="{myGlobalSettings.property}"/>
</Selector>

然而,阅读您的描述使您看起来直接需要为您的应用程序提供完整的框架。 MVC框架可以帮助您将应用程序的数据(在您的情况下,您所处的显示模式)与视图分开,而无需视图调用Application.application或全局单例。

这将为您进行更多的研究,但这是正确的道路。任何flex应用程序都可以从框架中受益,选择最适合您的框架。

答案 2 :(得分:0)

你可以很容易地做到这一点。以OOP的方式来思考它。每个mxml是一个不同的类。你想在另一个类中调用一个类的方法。如果您希望它在原始范围内运行,请将methor变量设为静态,并通过MXMLFileName.MethodName()调用它;

如果要在自己的作用域中执行,请创建父MXML的对象,然后调用该方法。