Apache flex 在自定义MXML组件中分配子组件属性的MXML语法是什么?
我正在开发一个定制的Flex4组件,它是两个现有Flex组件的集合。我希望能够为组件指定自己的自定义属性,并通过MXML访问现有的公共子组件属性。例如,我可能想调整标签和文本输入的字体颜色或样式 聚合标签和文本输入的玩具组件:Apache flex 在自定义MXML组件中分配子组件属性的MXML语法是什么?,apache-flex,syntax,mxml,Apache Flex,Syntax,Mxml,我正在开发一个定制的Flex4组件,它是两个现有Flex组件的集合。我希望能够为组件指定自己的自定义属性,并通过MXML访问现有的公共子组件属性。例如,我可能想调整标签和文本输入的字体颜色或样式 聚合标签和文本输入的玩具组件: <?xml version="1.0" encoding="utf-8"?> <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/
<?xml version="1.0" encoding="utf-8"?>
<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 prompt:String = "default prompt";
[Bindable] public var input:String = "default inpput";
]]>
</fx:Script>
<s:VGroup>
<s:Label id="cLabel" text="{prompt}" />
<s:TextInput id="cTextInput" text="{input}" />
</s:VGroup>
</s:Group>
但我对MXML的语法感到困惑。这似乎很容易,但我还没有找到答案。非常感谢您的帮助。您不能用MXML标记/值将显示层次结构串联起来。正如您所指定的,您可以在ActionScript中完成,但即使这样也可能被认为是一种不好的做法 我要指出,标签上和文本输入上都不是属性。它们是样式,因此,您拥有的代码:
myInput.cLabel.color = "0xffffff";
很可能会引发错误,因为颜色不是属性。您必须使用如下代码:
myInput.cLabel.setStyle('color',"0xffffff");
private var _property : String;
public function get property():String{
return _property;
}
public function set property(value:String){
_property = value;
myChildComp.property = value;
}
然而,由于风格通常由孩子继承;我猜想,在顶层组件中,您可以设置样式,它会立即自动传递给孩子们。因此,您应该能够做到:
myInput.setStyle('color',"0xffffff");
或在MXML中:
<local:myInput prompt="name" input="please enter name" color="0xffffff" fontStyle="bold" >
</local:myInput>
如果你需要在很多地方这样做的话,它会很糟糕。如果此组件的封装不是优先事项;只需在ActionScript中设置它们 感谢您对样式值的澄清,我应该使用一个更好的示例,它依赖于属性。在我看来,为聚合类的每个接口编写getter和setter比将正交类组合在一起更紧密地耦合。我想如果我想把组件组合在一起,我只需要习惯于写很多锅炉板。另一种选择是创建一个MXML模板类并将整个组件作为参数传入吗?类似于FlexForm类的东西?
<local:myInput prompt="name" input="please enter name" color="0xffffff" fontStyle="bold" >
</local:myInput>
private var _property : String;
public function get property():String{
return _property;
}
public function set property(value:String){
_property = value;
myChildComp.property = value;
}