как мы можем получить доступ к компоненту внутри itemRenderer из основного mxml?

У меня есть itemRenderer для списка, в котором я просто отображаю элементы и их детали соответственно. Я хочу, чтобы детали оставались невидимыми, и в моем основном файле mxml была кнопка «Показать детали», при нажатии на которую детали становились видимыми.

Итак, моя проблема в clickHandler, как мне получить доступ к свойству details в itemRenderer из основного mxml?

Заранее спасибо за помощь


person Juveria    schedule 14.07.2010    source источник


Ответы (3)


У меня было бы логическое значение на главном элементе, от которого отключены ключи itemRenderer. Доступ к itemRenderers списка не рекомендуется, потому что они повторно используются, и операции не могут быть гарантированы.

Для объяснения см. http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html

person adamcodes    schedule 14.07.2010

Есть несколько способов подойти к этому.

Один из них - использовать глобальный объект Singleton, содержащий значение «ShowDetails». Каждый itemRenderer может получить доступ к этому объекту и изменить его настройки. ModelLocator Кэрнгорма - один из примеров синглтона, который обычно используется таким образом. Я считаю, что у swiz есть нечто подобное. При необходимости вы также можете свернуть свою собственную.

Вы можете попытаться расширить класс List. List хранит itemRenderers в массиве, который, как мне кажется, защищен. Вам нужно будет расширить список и сделать этот защищенный массив общедоступным. После этого вы сможете получить доступ к списку объектов itemRenderers и напрямую изменить их свойства.

Однако я не уверен, что рекомендую любой подход. ItemRenderer действительно должен выбирать, что отображать, на основе отображаемых данных; не какая-то глобальная переменная. Можете ли вы изменить объекты в своем dataProvider и соответствующим образом обновить itemRenderer? Это третий вариант; хотя я не уверен, лучше или хуже, чем два предыдущих подхода.

person JeffryHouser    schedule 14.07.2010

У вас может быть переменная в массиве DataProvider с именем show, для которой установлено значение false. В средстве визуализации элементов привяжите свойство visible компонента сведений к data.show.

При нажатии кнопки show просмотрите массив dataProvider и установите для свойства show значение true. Это будет работать

Биш

person Drenai    schedule 14.07.2010
comment
Я собирался предложить поле в поставщике данных, но, поскольку я интерпретировал вопрос как все записи, я решил, что одна переменная будет управлять ими всеми. - person adamcodes; 14.07.2010