Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex AS3/Flex:如何让通过ViewStack加载的mxml文件看到它们的父文件';s变量等。?_Apache Flex_Actionscript 3_Oop_Flex3 - Fatal编程技术网

Apache flex AS3/Flex:如何让通过ViewStack加载的mxml文件看到它们的父文件';s变量等。?

Apache flex AS3/Flex:如何让通过ViewStack加载的mxml文件看到它们的父文件';s变量等。?,apache-flex,actionscript-3,oop,flex3,Apache Flex,Actionscript 3,Oop,Flex3,对于我在Flex中工作的一个项目,我决定为每个可以使用的“主题”创建几个单独的文件。由于每个主题都可以而且将需要特定的代码、图像、样式和几乎任何其他内容,因此仅使用经典的css选项实际上是不可能的 这种方法有一个问题,就是每个“子”mxml文件都不能读取父应用程序中创建的变量等。使用Application.Application解决了一半的问题,但对我来说,任何一种全局变量解决方案似乎都失败了。代码也因此变得不那么干净 我创建了一个类,该类在主应用程序中加载了一个静态变量,我使用它作为AS3全局

对于我在Flex中工作的一个项目,我决定为每个可以使用的“主题”创建几个单独的文件。由于每个主题都可以而且将需要特定的代码、图像、样式和几乎任何其他内容,因此仅使用经典的css选项实际上是不可能的

这种方法有一个问题,就是每个“子”mxml文件都不能读取父应用程序中创建的变量等。使用Application.Application解决了一半的问题,但对我来说,任何一种全局变量解决方案似乎都失败了。代码也因此变得不那么干净

我创建了一个类,该类在主应用程序中加载了一个静态变量,我使用它作为AS3全局变量的等价物。遗憾的是,不可能从这些“子”mxml文件访问该类,我只能重新启动该类,或者在主应用程序中编写一个包装函数来获取这些变量。这一点也不完美,仍然让我无法使用父应用程序中启动的类中的方法

让它正常工作的最好方法是什么

应用程序的运行情况:

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

我希望我的解释清楚一点。请提出任何可能有助于您进一步理解这一点的问题。非常感谢

-戴夫

小更新:更清晰一点:我有一个类,可以轻松创建相机视图。我在主应用程序中初始化并使用该类,然后将新的(web)cam(era)实例放入变量中,准备在需要的任何地方使用。然后,视图文件(themes/theTheme.mxml)以它想要的任何方式显示2个摄像头。我希望视图文件使用在主应用程序中创建的摄影机,这样我就不必要求主题创建人员反复实现所有这些。这是我为什么需要这个的一个例子


谢谢你迄今为止对我的帮助

听起来您已经准备好使用框架了!您可以使用依赖项注入在应用程序创建时设置它们

下面是一些有助于依赖项注入的框架

  • -允许您通过css选择器在任何视图上设置内容
  • -基于bifff的MVC框架
  • -MVC框架
注:我是Biff和Glue的作者

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


然而,阅读您的描述会使您看起来像是直接进入了对应用程序完整框架的需求。MVC框架帮助您将应用程序的数据(在您的情况下,您使用的是哪种显示模式)从视图中分离出来,而不需要视图调用Application.Application或全局单例


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

来自php背景,我知道您可能会出错。它不像php,每个文件都只是一个大的大块代码,可以包含在其他php文件中

每个mxml文件都是一个成熟的Actionscript类。您并没有“包括那个些mxml文件”,而是在主mxml类中创建属性,这些属性的类型是“子”mxml对象

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


但退一步。您确定要让这些子mxml文件完成所有这些工作吗?难道它们只是没有任何逻辑的愚蠢布局吗?然后您可以让主mxml操作它们。

您可以非常轻松地完成此操作。用面向对象的方式来思考它。每个mxml都是不同的类。您想在另一个类中调用一个类的方法。如果希望它在其原始范围内运行,请将metor变量设置为静态,并通过MXMLFileName.MethodName()调用它


如果您想在自己的范围内执行,请创建父MXML的对象,然后调用该方法。

虽然我喜欢MVC方法,但我不完全确定在Flex上使用框架是否适合我(目前为止)。到目前为止,我仍然习惯Flex,到目前为止,代码感觉一点也不干净或舒适。我自己也是一个PHP人,所以这可能与此有关。谢谢你的提醒,我已经把它们都放进书签了!我简直不敢相信没有(简单的)方法可以做到这一点,当然我不是唯一一个有这样设置的人:)。哦,这听起来很奇怪。我想让模板(子)项尽可能地愚蠢,但由于某种原因,我从未想到将我需要的任何东西从主应用程序“注入”到客户端。我有点盲目地让客户阅读家长的话。我试试这个,听起来很合乎逻辑。谢谢
<Selector match=".customStyleName">
  <Set thePropertyFromMyFile="{myGlobalSettings.property}"/>
</Selector>