2011-05-02 3 views
0

Я ищу способ вызова метода для ВСЕХ дочерних элементов DataGroup из DataGroup. Проблема в том, что при использовании события creationComplete для вызова метода дочернего метода этот метод вызывается только один раз для каждого объекта itemrenderer (child). после того, как элемент был нарисован один раз.Вызвать метод дочернего элемента datagroup

Теперь я хочу, чтобы дочерний компонент вызывал функцию каждый раз, когда содержащаяся в ней датагруппа меняет свои данные. Использование «updateComplete» или «dataChange» внутри компонента children (itemrenderer) будет работать, НО «updateComplete» и «dataChange» вызывается каждый раз, когда я изменяю представление (например, прокручиваю список) - это не то, что я хочу.

// edit Я также попытался получить детей, перейдя через массив parent.dataprovider и массив parent.getchild без везения, это означает, что элементы имеют значение null, но когда я проверяю режим отладки, это не так. однако в любом случае должен быть более простой способ.

ответ

0

Похоже, что у вас есть непонимание того, как работает DataGroup.

DataGroup принимает свойство dataProvider; и что dataProvider реализует интерфейс iList. Общие dataProviders могут быть ArrayCollection или XMLListCollection.

Для этого объяснения предположим, что в dataProvider имеется 100 элементов.

DataGroup собирается посмотреть, сколько визуального пространства он должен отображать элементы; и создать много экземпляров itemRenderer. Для этого же объяснения, скажем, в DataGroup отображается 7 элементов.

Итак, в этой ситуации DataGroup имеет семь детей, хотя у dataProvider есть 100 элементов.

Когда вы просматриваете группу данных, каждый визуализатор повторно используется. В DataGroup никогда не было более семи детей.

DataGroup не имеет свойства data, поэтому код запуска с DataGroup при изменении данных немного запутан. Вы должны иметь возможность запускать код каждый раз, когда изменения DataProvider DataGroup изменяются либо путем расширения, либо переопределения установленного метода dataProvider, либо путем добавления обработчика события к событию dataProviderChanged. Все связующие свойства запускают аналогично именованное событие, даже если они явно не документированы.

Помогает ли это? Если нет, возможно, вам нужно сказать нам, что вы хотите сделать в более конкретных условиях.

+0

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

+0

@masi Вы находитесь в сложной ситуации, потому что в идеальном мире, если компонент знает о некотором компоненте «выше» в иерархии отображения; это перерыв в инкапсуляции, который повторяет использование domonoshes. Один из подходов - запустить код внутри компонента itemRenderer, используя событие dataChange. Другим может быть прослушивание события dataProviderChanged внутри средства визуализации с использованием свойства владельца или родителя. – JeffryHouser

+0

Да, я знаю, что это не самая лучшая практика - но я в спешке и нуждаюсь в ней, чтобы работать, поэтому я не забочусь о лучших практиках atm :-) Во всяком случае, как я уже сказал, использование события dataChanged плохо, потому что оно также запускается при прокрутке , Но мне просто удалось заменить List на группу данных. И похоже, что в Datagroup dataChanged запускается только тогда, когда dataProviderChanged, так что теперь работает, и я отмечаю, что вы отвечаете как правильно. Thx m8! – masi

Смежные вопросы