对于我在Flex工作的项目,我决定为每个可以使用的'主题'创建几个单独的文件。由于每个主题都可以并且将需要特定的代码,图像,样式和其他任何东西,因此不可能使用经典的css选项。
我对这个方法有一个问题,那就是每个'child'mxml文件都无法读取父应用程序中创建的变量等。使用Application.application解决了一半的问题,但任何类型的全局变量解决方案似乎都失败了。而且由于这个原因,代码也没有那么清晰。
我创建了一个在主应用程序中加载的类,其中包含一个静态变量,我将其用作AS3等效的全局变量。遗憾的是,无法从这些'子'mxml文件访问它,我只能重新启动该类,或者在主应用程序中编写一个包装函数来获取这些变量。这再次是完美的,但仍然没有让我使用在父应用程序中启动的类的方法。
让这种方法运作良好的最佳方法是什么?
申请表的简要说明:
1)主应用程序加载几个类/包,用适当的设置启动一些等等 2)主应用程序有一个ViewStack,每个主题都来自一个外部文件(themes / ThemeName.mxml) 3)每个主题需要访问主应用程序设置的至少2个变量(通过使用加载的类和方法),有些可能还需要直接访问主应用程序应该全局可用的某些功能,以及特定主题mxml。
我希望我的解释有点清楚。请提出任何可能有助于您了解此问题的问题。非常感谢提前!
-Dave
小更新:为了更加澄清一点:我有一个允许我轻松创建摄像机视图的课程。我在主应用程序中初始化并使用该类,然后将新的(web)cam(时代)实例放入变量中,随时可以在需要的地方使用。视图文件(themes / theTheme.mxml)然后以任何方式显示2个摄像机。我希望视图文件使用在主应用程序中创建的相机,这样我就不必要求主题创建人员一遍又一遍地实现所有这些。这是我需要这个的一个例子。
感谢您帮助我到目前为止!
答案 0 :(得分:2)
来自php背景,我看到你可能出错的地方。它不像php,每个文件只是一个很大的代码,可以包含在其他php文件中。
每个mxml文件都是一个完整的Actionscript类。你不是“包括那些mxml文件”,你实际上是在主mxml类中创建属性,而这些属性的类型是“子”mxml对象。
如果你的孩子的mxml组件确实需要来自父级的一些信息,你应该将这些数据传递给它们。
但退后一点。您确定要让那些子mxml文件完成所有工作吗?他们可能只是简单的布局,其中没有任何逻辑吗?然后你可以让主mxml操纵它们。
答案 1 :(得分:1)
听起来你已经为框架做好了准备!您可以使用依赖注入在应用程序创建时设置内容。
以下是一些有助于依赖注入的框架。
注意:我是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的对象,然后调用该方法。