2011-03-17 41 views
2

在一间flex3项目这个代码工作(注意,第六项enabled属性):不同行为的XMLList

<mx:XMLList id="items"> 
      <menuitem label="file"> 
       <menuitem label="file.new" data="New"/> 
       <menuitem label="file.saveAs" data="SaveAs"/> 
       <menuitem label="file.open" data="Open"/> 
       <menuitem label="file.close" data="Close"/> 
      </menuitem> 
      <menuitem label="business"> 
       <menuitem label="business.add" data="AddBusiness"/> 
       <menuitem label="business.delete" enabled="{someproperty.selected}" data="DeleteBusiness"/> 
      </menuitem> 
      <menuitem label="help"> 
       <menuitem label="help.about" data="About" /> 
      </menuitem> 
     </mx:XMLList> 

然而FX:XMLList中不能处理绑定那样。此代码给出编译错误:

 <fx:XMLList id="items"> 
      <menuitem label="file"> 
       <menuitem label="file.new" data="New"/> 
       <menuitem label="file.saveAs" data="SaveAs"/> 
       <menuitem label="file.open" data="Open"/> 
       <menuitem label="file.close" data="Close"/> 
      </menuitem> 
      <menuitem label="business"> 
       <menuitem label="business.add" data="AddBusiness"/> 
       <menuitem label="business.delete" enabled="{someproperty.selected}" data="DeleteBusiness"/> 
      </menuitem> 
      <menuitem label="help"> 
       <menuitem label="help.about" data="About" /> 
      </menuitem> 
     </fx:XMLList> 

1120:访问未定义的属性项。

回答

2

我想你正在编译您的项目在严格模式下,并且您的XMLList直接使用项目作为dataProvider一些成分(至少这是我发现重现该问题的唯一方法),这样:

<s:List> 
    <s:dataProvider> 
     <s:XMLListCollection> 
      <fx:XMLList id="items"> 
       <menuitem label="file"> 
        <menuitem label="file.new" data="New"/> 
        <menuitem label="file.saveAs" data="SaveAs"/> 
        <menuitem label="file.open" data="Open"/> 
        <menuitem label="file.close" data="Close"/> 
       </menuitem> 
       <menuitem label="business"> 
        <menuitem label="business.add" data="AddBusiness"/> 
        <menuitem label="business.delete" enabled="{someproperty.selected}" data="DeleteBusiness"/> 
       </menuitem> 
       <menuitem label="help"> 
        <menuitem label="help.about" data="About"/> 
       </menuitem> 
      </fx:XMLList> 
     </s:XMLListCollection> 
    </s:dataProvider> 
</s:List> 

这会再现您提到的相同错误(#1120)。为了解决这个问题,你必须在它的容器之前声明XMLList(例如它是List),在<fx:Declarations>块中。通过这种方式,您可以确保在创建容器之前将存在项目引用,这是编译期间严格模式验证的内容。

<fx:Declarations> 
    <fx:XMLList id="items"> 
     <menuitem label="file"> 
      <menuitem label="file.new" data="New"/> 
      <menuitem label="file.saveAs" data="SaveAs"/> 
      <menuitem label="file.open" data="Open"/> 
      <menuitem label="file.close" data="Close"/> 
     </menuitem> 
     <menuitem label="business"> 
      <menuitem label="business.add" data="AddBusiness"/> 
      <menuitem label="business.delete" enabled="{someproperty.selected}" data="DeleteBusiness"/> 
     </menuitem> 
     <menuitem label="help"> 
      <menuitem label="help.about" data="About"/> 
     </menuitem> 
    </fx:XMLList> 
</fx:Declarations> 

<s:List> 
    <s:dataProvider> 
     <s:XMLListCollection source="{ items }"/> 
    </s:dataProvider> 
</s:List> 

更新:这也将产生#1120错误,如果您没有启用编译器的严格模式选项做。只需在<fx:Declarations>块中声明XMLList,它应该可以正常工作。