Flex 3: освежающий репитер после добавления ребенка - PullRequest
0 голосов
/ 23 мая 2011

Внутри дочернего элемента у меня есть элемент 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, помещает некоторые значения по умолчанию и добавляет его в список позиций проекта.После добавления новой информации я увеличил высоту проекта, а затем проверил, чтобы высота нового проекта не перекрывала другие проекты ... но эта информация не имеет отношения к этому сообщению.

MyПроблема в том, что, как только я добавляю нового дочернего элемента в переменную 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 в качестве источника данных в ретрансляторе, информация больше не загружается на экран: (

1 Ответ

0 голосов
/ 23 мая 2011

Pure XMLList не может быть действительным источником изменений списка обработки привязки данных.Чтобы избавиться от правильной привязки данных, используйте XMLListCollection.

...