0

子内には、次の構造を持つ 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">

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 をリピーターのデータプロバイダーとして使用すると、情報が画面に読み込まれなくなります :(

4

1 に答える 1

0

PureXMLListは、データ バインディング処理リストの変更の有効なソースになることはできません。適切なデータ バインディングを使用しないようにするには、XMLListCollection代わりに使用します。

于 2011-05-23T17:29:21.780 に答える