2011-02-24 55 views
0

我在Accordian中使用Repeater,看起來看不到UserArray中的單個元素。如果我向userArray添加另一個條目,那麼Repeater工作正常。中繼器無法正常工作,當傳遞具有單個元素的數據提供者(數組)時

想法??

private function currUsersServiceHandler(event:ResultEvent):void{ 

        if (event.result.currentUsers != null) 
        { 
         if (event.result.currentUsers.user is ArrayCollection) // if more than one elements are present 
         { 
          usersArray = event.result.currentUsers.user; 
         } 
         else if (event.result.currentUsers is ObjectProxy) 
         { //FIXIT usersArray populate by following line has some issue 
          usersArray = new ArrayCollection(ArrayUtil.toArray(event.result.currentUsers)); 
         } 
        } 
       } 

     <mx:HTTPService id="currUsersService" url="currUsers.xml" result="currUsersServiceHandler(event)"/> 

<mx:Accordion includeIn="UserList" x="10" y="10" width="554" height="242" > 
     <mx:Repeater id="rep" dataProvider="{usersArray}"> 
      <mx:Canvas width="100%" height="100%" label="{rep.currentItem.firstName}" > 
        <mx:HBox> 
         <s:Label text="{rep.currentItem.firstName}"/> 
         <s:Label text="{rep.currentItem.lastName}"/> 
         <mx:/HBox> 
      </mx:Canvas> 
     </mx:Repeater> 
</mx:Accordian> 

編輯:

還有就是我剛纔注意到,即該手風琴確實顯示一個選項卡(在數組有一個元素),但它不是與我設置的第一個名字標記另一件事。如果我輸入另一個用戶,則會出現兩個選項卡,並且兩個選項卡都標有我設置的名稱。第一個選項卡也顯示爲標籤。

+0

無後顧之憂。如果您將其從Accordion標籤中移除,您的中繼器是否可以正常工作? – 2011-02-24 16:16:43

+0

直放站需要一個容器,對吧?所以我需要有Accordian(容器)。如果我刪除手風琴標籤,那麼我得到以下錯誤:中繼器需要一個基於Halo容器的父母 – baltoro 2011-02-24 16:24:16

+0

是的,它的確如此。你嘗試過VBox嗎? – 2011-02-24 16:31:02

回答

1

對於我來說,這對於dataProvider中的1項不起作用是沒有意義的,但可以與兩個一起使用。

這就是說,這種方法令我感到煩躁,我傾向於遠離使用中繼器。我會建議一種不同的方法。

首先創建一個組件來顯示您的數據。你可以重用你現有的代碼。從概念上講是這樣的:

 <mx:Canvas width="100%" height="100%" > 
<mx:Script><[[ 
public var user : Object; 
]]></mx:Script> 
       <mx:HBox> 
        <s:Label text="{user.firstName}"/> 
        <s:Label text="{user.lastName}"/> 
        <mx:/HBox> 
     </mx:Canvas> 

然後在原來的組件在ActionScript中創建的組件的新實例:

for each(var myUserObject : Object in usersArray){ 
    var newUserDisplayObject : UserDisplayObject = new UserDisplayObject(); 
    newUserDisplayObject.user = myUserObject; 
    newUserDisplayObject.label = myUserObject.firstName 
    accordian.addChild(newUserDisplayObject); 
} 
+1

@Flextras,Adobe也發佈了一個在手風琴中使用Repeater的例子,所以它應該*是可能的。 http://cookbooks.adobe.com/post_E4X_Accordion_Repeater-1488.html雖然你的例子仍然是健全的。 :) – 2011-02-24 17:02:52

+0

@Jason Towne我相應地編輯了我的答案。 – JeffryHouser 2011-02-24 17:46:20

相關問題