初始化属性
问题描述:
说我有以下的自定义组件:初始化属性
<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函数是微不足道的,可以内联包含,但这只是一个简单的例子。
答
它与组件生命周期无关,更多与绑定规则有关。你的函数“formatProp”应该接收参数“prop”作为参数,以便在prop改变时被调用。试试这个代码:
private function formatProp(props:String) : String {
return "Hello, " + props;
}
<s:Label text="Greeting: {formatProp(prop)}"/>
答
的“优雅的方式”将实际提供的数据绑定,让你也可以以后改变属性。你的最初想法看起来不错,与Cornel提供的答案一致。我只想提到这一点,因为你的实际问题听起来更像是你知道你的数据绑定不起作用,你只是想推迟变量的初始设置。
顺便说一句,如果您计划在Actionscript(而不是mxml)中创建自定义组件,您将面临相反的问题:在您有机会真正创建子项之前设置属性,因此如果您需要缓冲它们他们实际上应该影响一些孩子的财产。
你尝试从creationComplete事件中运行你的formatProp metehod吗? – Robusto 2010-04-16 15:33:47