0

我在上面的代码中得到一个错误,

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

<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”

4

1 回答 1

0

除了布局和所有其他格式设置之外,这里的问题是您将 mxml 对象的默认值(一个因组件而异的属性)与其他属性混合在一起。每个 mxml 组件都有一个默认属性。默认属性不需要您在对象前面加上属性名称,就像您在设置布局时所做的那样。

让我们分解你的子对象<s:FormItem />

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

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

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

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

解决方案很简单:将任何属性声明(如<s:layout>)移动到表单项标记的开头或结尾,这样它们就不会干扰“默认属性”使用的值:

<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.

于 2013-01-07T18:59:40.380 回答