我在上面的代码中遇到错误,
错误:'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”
答案 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}}这一事实无关。