Flex 3: обновление повторителя после добавления дочернего элемента

#xml #apache-flex #repeater #appendchild

#xml #apache-flex #повторитель #appendchild

Вопрос:

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

Ответ №1:

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

Комментарии:

1. Моя переменная, которую я использую в качестве источника данных, объявляется следующим образом:[Bindable] public var projectPositions:XML; и в самом моем повторителе мой источник данных определяется следующим образом: dataProvider=»{projectPositions.children()}»

2. Правильно. Это XMLList . Попробуйте использовать XMLListCollection вместо этого. И добавьте туда новые значения.

3. Я попытался преобразовать имеющуюся у меня в настоящее время переменную XML в xmllistcollection, а затем использовать ее, и в итоге получаю те же результаты… С помощью оповещений я вижу, что элемент был добавлен, но он не отображается пользователю.

4. Хорошо, можете ли вы добавить больше кода (объявление переменной, часть повторителя, часть добавления значения)?

5. Я добавил больше кода … он находится под частью «РЕДАКТИРОВАТЬ — дополнительная информация» первого сообщения