2011-05-23 60 views
0

在一个孩子后刷新中继器,我有以下结构的XML元素:的Flex 3:添加子

<position> 
    <startOffset>*NUMBER*</startOffset> 
    <numDays>*NUMBER*</numDays> 
    <role>*String*</role> 
    <student>*String*</student> 
    <conflict>*BOOLEAN*</conflict> 
</position> 

然后我用一个转发器,列出每个出到屏幕上。我创建了一个用于创建位置的按钮。因此,一旦用户点击该按钮,我调用下面的函数:

private function addPosition(index:Number):void 
{ 
    var tempObject:XML = XML("<position><startOffset>0</startOffset><numDays>3</numDays><role>1C</role><student> </student><conflict>false</conflict></position>");    
    projectPositions.appendChild(tempObject); 
    projectHeight += 35; 
    parentApplication.checkOverlap();   
} 

上述函数创建一个新的XML对象,把一些默认值,并将其添加到项目位置的列表。在追加新信息后,我将项目的高度做得更大,然后检查以确保新项目的高度不与其他任何项目重叠......但这些信息与此帖子无关。

我的问题是这样的 - 一旦我将一个新的子项追加到XML变量,它不会出现在屏幕上。是否有一个“刷新”或“重新渲染”的选项,我可以做的中继器,以使新的儿童秀?

编辑 - 其他信息

这里的变量声明(信息是从父来):

[Bindable] public var projectPositions:XML; 

这里的中继器(它实际上调用另一个孩子):

<mx:Repeater id="indPositions" dataProvider="{projectPositions.children()}" startingIndex="0"> 
    <components:block height="38" alpha=".75" 
     id="thisBlock" visible="true" horizontalScrollPolicy="off" 
     width="{projectWidth}" 
     oneDay="{Number(oneDay)}" 
     position="{indPositions.currentItem.role}" 
     offSet="{indPositions.currentItem.startOffset}" 
     numDays="{indPositions.currentItem.numDays}" 
     sName="{indPositions.currentItem.student}" 
     isConflict="{indPositions.currentItem.conflict}" 
     projectName="{projectTitle}" 
     totalSpan="{returnSpan()}" 
     projectsHttp="{projectsHttp}" 
     allStudents="{allStudents}" 
     thisBlockID="{indPositions.currentIndex}" 
    /> 
</mx:Repeater> 

然后,一旦用户点击“添加位置”按钮,将调用以下函数:

private function addPosition(index:Number):void 
{ 
    var tempObject:XML = XML("<position><startOffset>0</startOffset><numDays>3</numDays><role>" + possiblePositions[index] + "</role><student> </student><conflict>false</conflict></position>"); 
    positionsList.addItem(tempObject); 
    projectHeight += 35; 
    parentApplication.checkOverlap(); 
} 

这是我第一次尝试这样做(当我发这个帖子)...然后我你的答复后,改变了一些东西,并结束了与此:

声明:

[Bindable] public var projectPositions:XML; 
[Bindable] public var projectXMLList:XMLList = XMLList(projectPositions); 
[Bindable] public var projectPositionsXLC:XMLListCollection = XMLListCollection(projectXMLList); 

中继器:

<mx:Repeater id="indPositions" dataProvider="{projectPositionsXLC}" startingIndex="0"> 

addPosition功能:

private function addPosition(index:Number):void 
{ 
    var tempObject:XML = XML("<position><startOffset>0</startOffset><numDays>3</numDays><role>" + possiblePositions[index] + "</role><student> </student><conflict>false</conflict></position>");    
    projectPositionsXLC.addItem(tempObject); 
    projectHeight += 35; 
    parentApplication.checkOverlap();   
} 

一旦我做出改变,并使用的XMLListCollection作为中继器的数据提供程序,信息在屏幕上:(不再负载

回答

0

XMLList不能进行数据绑定处理的有效源列表更改。要取消正确的数据绑定,请使用XMLListCollection

+0

我用作数据提供者的变量是这样声明的:[Bindable] public var projectPositions:XML;并在我的转发器本身,我的dataprovider是这样定义的:dataProvider =“{projectPositions.children()}” – Brds 2011-05-23 17:36:19

+0

对。它是'XMLList'。尝试使用'XMLListCollection'来代替。并在那里添加新的值。 – Constantiner 2011-05-23 17:38:09

+0

我试图转换XML变量我目前必须到一个xmllistcollection,然后使用它,并最终得到相同的结果...我可以看到,通过警报,该项目已添加,但它不显示给用户。 – Brds 2011-05-23 18:00:08