在一个孩子中,我有一个具有以下结构的 XML 元素:
<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">
添加位置功能:
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 用作转发器中的数据提供者,信息将不再加载到屏幕上:(