2011-03-17 40 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,它應該可以正常工作。