Flex ItemRenderer как поле `данных`? - PullRequest
0 голосов
/ 27 мая 2009

Я бы хотел, чтобы данные, предоставленные в DataGrid, решали, как лучше всего их визуализировать (то есть пусть данные несут с собой объект, который будет выполнять рендеринг).

Например, путем создания интерфейса «Renderable», который имеет свойство «renderer: IFactory», а затем используется следующим образом:

<mx:DataGrid x="0" y="0" width="100%" dataProvider="{myDataProvider}">
    <mx:columns>
    <mx:DataGridColumn headerText="Task" width="100"
        itemRenderer="{(data as Renderable).renderer}"/>
    </mx:columns>
</mx:DataGrid>

Но для этого Renderable должен расширять IEventDispatcher, что кажется немного большим ...

Я также пытался использовать:

itemRenderer="{(data as Renderable).getRenderer()}"

Что ничего не делает (на самом деле метод getRenderer никогда не вызывается).

Есть ли лучший способ сделать это? Я делаю что-то в корне неправильно?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 мая 2009

Я могу ошибаться, но я думаю, что свойство "data", на которое вы ссылаетесь в приведенном выше примере кода, является "данными" для контейнера верхнего уровня в вашем представлении, а не для этой конкретной строки DataGrid. На ум приходит несколько других подходов:

  1. Реализовать класс средства визуализации отдельных элементов, который проверяет данные, передаваемые ему, и использует надлежащий модуль визуализации элементов для типа предоставленных данных.
  2. Реализуйте функцию в представлении вашей DataGrid, которая проверяет ваш dataProvider и возвращает правильный класс средства визуализации элементов; вызовите это внутри свойства DataGridColumn.itemRenderer, используя выражение привязки.
  3. Реализация подкласса DataGridColumn, в котором запрограммирована логика для установки правильного itemRenderer.

Я бы на самом деле не рекомендовал смешивать «данные рендеринга», которые зависят от вида, с данными из вашей модели. Если только вы не оберните данные базовой модели объектом, который предоставляет его вместе с средством визуализации (то, что некоторые люди называют ViewModel).

0 голосов
/ 27 мая 2009

Сделать getRenderer свойством [Bindable]

...