Rob*_*etz 1 apache-flex access-modifiers hierarchy actionscript-3 class-hierarchy
我无法将头部缠绕在与其主机组件相关的火花皮类上.基本上,从我在Flex 4框架中出现的大多数皮肤看到的情况来看,它们并不直接暴露在主机组件中动态设置的属性.相反,它们定义暴露给外观类的状态,以定义组件应该看起来不同的时间.当你拥有一个标准状态集的非常简单的组件时,这一切都很好,但是当你在主机组件中设置了20个不同的属性(假设)应该改变皮肤的外观时它可能变得非常复杂很快.
我已经看到他们习惯于解决这个问题的方法是重写commitproperties并使skin类中的函数无效,从那里获取他们想要的属性的值,然后将它们设置为一个本地实例化的变量.皮肤类.这很好,但我觉得这只是一个修补程序,它使事情变得比它需要的复杂得多.
这是我的问题:有没有办法直接从宿主组件类公开可绑定属性,所以当你定义你的皮肤类时,它可以直接从中读取?假设您有自定义按钮,其布尔属性为"selected".在皮肤类中,您希望为属性"selected"添加get和set函数,这样您就可以在设置时对皮肤执行某些操作.你如何告诉皮肤类这是一个可用的属性供你从主机组件使用?
这个问题存在于非常理论的层面.我不清楚你要完成什么,也不清楚你在组件类上设置了什么类型的属性.我怀疑,如果你有20个属性,并且每个属性需要以某种方式与不同的皮肤状态相关联,那么存在架构问题.
但是,我可以尝试回答您的具体问题.
Run Code Online (Sandbox Code Playgroud)Is there any way to directly expose a bindable property from the主机组件类,所以当你定义你的皮肤类时,它可以直接读取吗?
在构建Flex MobileSkins时,他们建议创建一个名为hostComponent的属性,该属性为外观类提供对组件类的引用.MXML皮肤已经具有类似的属性.如果您使用的是自定义外观,则会使用HostComponent元数据自动创建此属性.因此,从skin类中,您可以使用hostComponent属性访问组件类的属性.
假设您有自定义按钮,其布尔属性为"selected".在皮肤类中,您希望为属性"selected"添加get和set函数,这样您就可以在设置时对皮肤执行某些操作.
我没想到你想要这样做的情况.通常,您不会在skin类上定义要在skin类的实例上显式更改的任何属性.
您可以在属性更改时从组件类调度事件.[这很常见].然后使用hostComponent属性在skin类中侦听该事件并更改其中的内容.
还有一种方法可以从组件类中访问外观类实例.因此,您可以使用skin属性直接在外观类上更改属性.
如果不仔细考虑,我就不会采用任何一种方法.理想情况下,组件类和皮肤类应该相互封装; 每种方法都会提供依赖性.
| 归档时间: |
|
| 查看次数: |
1782 次 |
| 最近记录: |