2010-10-14 3 views
0

У меня есть приложение flex с DataGrid с несколькими столбцами (определено в файле MXML), и мне нужно «наследовать» столбцы сетки. То есть, мне нужно написать код ActionScript, который, учитывая объект DataGrid, может определять различные вещи о сетке (и, более конкретно, столбцах сетки).Нужно «наследовать» внутренности flex <mx: itemRenderer>

В частности, если столбец представляет собой просто текстовый вывод, мне это все равно, но если в нем есть «управляемые» элементы управления (флажки, ссылки и т. Д.).

Во-первых, я предполагаю, что столбцы, содержащие «действующее» содержимое, будут находиться в пределах < mx: itemRenderer > теги (иначе это будет просто текст); сообщите мне, если это неверно.

Далее мне нужно «копать» в структуры, натягивая объект AS, соответствующий < тх: DataGridColumn > из < тх: DataGrid > (у меня это), а затем потянув объект как соответствующий к < mx: itemRenderer > из mx: DataGridColumn (два способа разграничения, это не кажется очень полезным), а затем вытаскивает объект AS, который соответствует < mx: Компонент > из mx: itemRenderer (если есть , мне непонятно, действительно ли компонент mx: Component создает объект) и, наконец, вытащил объект AS, соответствующий 0xmx: LinkButton > (или что-то еще) из mx: Component.

Кто-нибудь знает, как это сделать?

P.S. Я понимаю, что почти нет предела тому, что может скрываться внутри itemRenderer; если я смогу докопаться настолько далеко, я готов протестировать кучу вещей, которые я ожидаю, и игнорировать остальные.


Чтобы прояснить ситуацию, меня попросили предоставить соответствие (доступность) раздела 508 к существующему приложению. Конечно, в этом есть много частей, включая программы чтения с экрана и т. Д. ... но одним из первых шагов является то, что приложение можно использовать без мыши.

Многие из существующих экранов имеют технологию пользовательского интерфейса, состоящую из DataGrid с элементами, которые размещают элементы управления, такие как переключатели и кнопки ссылок, а также элементы в ячейках (одинаковый тип управления вплоть до столбца). Все хорошо и хорошо, за исключением того, что я не могу найти способ взаимодействовать с этими элементами управления с клавиатуры.

Итак, я модифицировал один экран, чтобы открыть горячую клавишу, которая отображает контекстное меню, позволяя пользователю стрелять вверх/вниз среди возможных элементов и нажать клавишу ВВОД, чтобы выбрать один (установите флажок, нажмите кнопку linkbutton, и т.д). Но это было специфично для экрана, и кому-то будет слишком легко обновить экран (например, добавить другой столбец действия) и пренебречь меню.

Был предложен лучший (?) Подход: подкласс сетки данных, интроспекция поиска действующих столбцов, создание меню автоматически, и теперь все, что нам нужно сделать, это заменить SuperDataGrid для DataGrid, и наши экраны будут быть совместимым с 508.

Если кто-то может порекомендовать лучший способ сделать экраны 508-совместимыми (без изменения пользовательского интерфейса) и с минимальным усилием на экране, я все уши.

Возможно, я недостаточно прояснился, так как вы продолжаете пропустить этот пункт, поэтому позвольте мне попробовать еще раз.

Я НЕ пишу код уровня приложения ... если бы я был, я бы точно знал, что делает логика, и я бы мог использовать связанные данные обычным способом. Фактически, код уровня приложения использует обычные данные. Но это совершенно не имеет значения.

Что мне нужно сделать, это написать «код уровня инфраструктуры»: то есть код, который работает «ниже» уровня логики приложения. Я пытаюсь эффективно добавить функцию DataGrids, которую должен был включить Adobe, но не сделал этого. Если я смогу заставить этот класс работать, можно будет просто отбросить его на десятки экранов БЕЗ МЕНЯ, КАК АВТОР АВТОМАТИЧЕСКОГО КЛАССА, ЗНАЧИТЕЛЬНО НИЧЕГО ОБ ЭТОМ ЭКРАНАХ ИЛИ ЛОГИКЕ В НИХ. Единственный способ, с помощью которого я могу представить эту работу, - это посмотреть в datagrid и обнаружить во время выполнения какие типы элементов управления скрываются внутри нее и, возможно, то, к чему они привязаны (на самом деле, я могу, возможно, просто выполнить любой щелчок = foo() "говорит, что нужно делать, и мне не нужно будет знать, к чему они привязаны).

Имеет ли это смысл?

Возможно ли это?

ответ

0

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

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

+0

Мне вообще не нужно влиять на рендеринг, мне просто нужно вырыть инструмент рендеринга, чтобы найти флажок/etc внутри, на который я буду влиять обычными способами. – MarkV

+0

@MarkV, хорошо, не делаю. Установите флажок в поле «данные», к которому привязан элемент itemRenderer. –

+0

Состояние, несомненно, уже отражено в элементе данных ... но как я могу узнать, что * есть * флажок или какой элемент данных он привязан к * обобщенному * способу, даваемому немного, но datagrid? Обнаружение * существования * элемента управления и/или данных, с которыми оно связано, является проблемой, а не манипулировать им, когда я туда доберусь. – MarkV