Apache flex 在flex中创建子组件之前初始化自定义组件的属性
假设我有以下自定义组件:Apache flex 在flex中创建子组件之前初始化自定义组件的属性,apache-flex,data-binding,custom-component,Apache Flex,Data Binding,Custom Component,假设我有以下自定义组件: <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <fx:Script> <![CDATA[ [Bindable] public v
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
[Bindable]
public var prop:String;
private function formatProp() : String {
return "Hello, " + prop;
}
]]>
</fx:Script>
<s:Label text="User: {prop}"/>
<s:Label text="Greeting: {formatProp()}"/>
</s:Group>
如果我像这样将其添加到我的应用程序中:
<local:MyComponent prop="Hello"/>
结果如下:
User: Mark
Greeting: Hello, null
用户:马克
问候语:你好,空
Flex似乎在初始化子标签后,正在我的自定义组件上设置prop
,因此它依赖于属性更改事件来设置用户标签
有没有一种优雅的方法可以让Flex在最初评估绑定之前等待设置所有组件的属性
注意:我意识到formatProp函数很简单,可以内联使用,但这只是一个简化的示例。它与组件livecycle无关,更与绑定规则有关。您的函数“formatProp”应该接收参数“prop”作为参数,以便在更改prop时调用。请尝试以下代码:
private function formatProp(props:String) : String {
return "Hello, " + props;
}
<s:Label text="Greeting: {formatProp(prop)}"/>
私有函数formatProp(props:String):String{
返回“你好,”+道具;
}
最“优雅的方式”是实际提供数据绑定,以便以后也可以更改属性。根据康奈尔提供的答案,您最初的想法看起来不错。我只是想提到这一点,因为您的实际问题听起来更像是您知道数据绑定不起作用,您只是想推迟变量的初始设置
顺便说一句,如果您计划在Actionscript(而不是mxml)中创建自定义组件,您将面临相反的问题:在您有机会实际创建子组件之前设置属性,因此,如果它们确实会影响某些Child的属性,您可能需要对它们进行缓冲。您是否尝试从creationComplete事件运行formatProp Metethed?