Flex 4子元素错误

时间:2013-01-07 12:02:14

标签: flex flex4 flex3 flash-builder

我在上面的代码中遇到错误,

错误:'FormItem'的子元素作为'mxmlContentFactory'的默认属性值必须是连续的。

<s:Form id="bxPrePaidTypeAdvanced" width="100%">
    <s:layout>
    <s:VerticalLayout paddingTop="0" paddingLeft="0" paddingRight="0" paddingBottom="0"/>
    </s:layout>

    <s:FormItem width="0" label="Form Item:">
    <s:Label text="label text" />
    <s:layout>
    <s:HorizontalLayout paddingLeft="{(-1)*(rbPerDay.width + 16)}" gap="16"/>   
    </s:layout>

    <mx:RadioButton groupName="prePaidAdvanced"
id="rbPerDay"
label="{resourceManager.getString('locale','perDay')}"
labelPlacement="left"
change="rbPerDay_changeHandler(event)"/>

<mx:ComboBox id="cbDueDay" width="80" dataProvider="{daysArray}"/>
</s:FormItem>

我正在将flex 3迁移到4,所以我不知道我是否需要在这里进行一些更改。

另外,当我尝试更改<mx:RadioButton to <s:RadioButton时,会出现以下错误 无法解析组件类型spark.component.RadioButton的属性“labelPlacement”

1 个答案:

答案 0 :(得分:0)

除了布局和所有其他格式化的东西之外,这里的问题是你将mxml对象的默认值(一个属性因组件而异)与其他属性混合在一起。每个mxml组件都有一个默认属性。默认属性不要求您使用属性名称为对象添加前缀,就像设置布局时一样。

让我们拆分<s:FormItem />的儿童对象:

  • 第一个子节点是一个显示对象,<s:Label /> - 因为此标签只是作为表单项的子节点出现,它使用默认属性,称为“mxmlContentFactory”。

  • 第二个孩子是<s:layout>财产。此代码告诉<s:FormItem />layout属性设置为<s:HorizontalLayout />,在这种情况下为<s:RadioButton />。使用非默认布局可能在这里很好,它绝对不是您的错误消息的原因。

  • 第三个孩子是另一个显示对象,<s:layout>。这个孩子应该是第一个孩子正在使用的默认属性(mxmlContentFactory)的一部分。

您的错误消息指出要用于“默认属性”的项应该是连续的。因此,通过在两个“默认”属性的中间设置布局属性,可以创建此错误。

解决方案很简单:将任何属性声明(如<s:FormItem width="0" label="Form Item:"> <s:layout> <s:HorizontalLayout paddingLeft="{(-1)*(rbPerDay.width + 16)}" gap="16"/> </s:layout> <s:Label text="label text" /> <mx:RadioButton groupName="prePaidAdvanced" id="rbPerDay" label="{resourceManager.getString('locale','perDay')}" labelPlacement="left" change="rbPerDay_changeHandler(event)"/> <mx:ComboBox id="cbDueDay" width="80" dataProvider="{daysArray}"/> <s:/FormItem> )移动到表单项标记的开头或结尾,这样它们就不会干扰“默认属性”使用的值:

HorizontalLayout

此错误将在Flex 3或Flex 4中发生。同样,它与您尝试在FormItem内使用{{1}}这一事实无关。