В настоящее время я разрабатываю динамическую диаграмму LineChart в FLEX 4. Я реализую элемент управления Tree рядом с моей LineChart, который будет фильтровать поставщик данных LineChart и ряды строк. Древовидный элемент управления имеет несколько ветвей и, в конечном итоге, 5 дочерних элементов (конечных узлов) в нижней части последней ветви.
Мне нужно, чтобы листовой узел / дочерние элементы отображались в виде флажков внутри элемента управления деревом. Насколько я понимаю, для этого потребуются переопределения в классе TreeItemRenderer. Здесь я немного не понимаю, как это реализовать.
В настоящее время я могу различать лист и ветки с помощью этого кода в моем основном компоненте MXML. Я добавил это, потому что это может быть полезно для некоторых начинающих разработчиков FLEX, таких как я, которые не могут легко найти эту функциональность, хорошо задокументированную:
private function treeClick(e:ListEvent):void {
_selectedItem = Tree(e.currentTarget).selectedItem;
if(mainTree.dataDescriptor.isBranch(_selectedItem)) {
Alert.show('branch click');
}
else {
Alert.show('leaf node click');
}
}
Я смотрю на класс переопределения TreeItemRenderer из следующего примера здесь:
В этом примере они переопределяют суперфункцию createChildden, добавляя флажки к элементу управления деревом.
У меня вопрос: Могу ли я переопределить функцию createChildren непосредственно в моем компоненте MXML и не использовать весь файл класса для переопределения этой функции? Должен ли я для этого заново изобретать колесо?
Кроме того, как я могу различить, что мой treeItem является листовым узлом, а не родительским, в функции переопределения? Я хочу добавить флажки только к листовым узлам, как я могу различать? В следующем примере флажки добавляются ко всем ветвям и конечным узлам, но я хочу добавить флажки только к конечным узлам / дочерним узлам. Как бы вы к этому подойти?
override protected function createChildren( ): void
{
super.createChildren( );
if( !_checkbox )
{
_checkbox = new CheckBoxExtended( );
_checkbox.allow3StateForUser = false;
_checkbox.addEventListener( MouseEvent.CLICK, onCheckboxClick );
addChild( _checkbox );
}
}
Вот XML, с которым я работаю:
<mx:XMLList id="treeData">
<node label="DAIX">
<node label="Account 1">
<node label="Premise 1">
<node label="Device 1" oid="31" isChecked="false">
</node>
<node label="Device 2" oid="32" isChecked="false">
</node>
</node>
<node label="Premise 2">
<node label="Device 1" oid="41" isChecked="false">
</node>
<node label="Device 2" oid="42" isChecked="false">
</node>
</node>
</node>
<node label="Account 2">
<node label="Premise 1">
<node label="Device 1" oid="31" isChecked="false">
</node>
<node label="Device 2" oid="32" isChecked="false">
</node>
</node>
<node label="Premise 2">
<node label="Device 1" oid="31" isChecked="false">
</node>
<node label="Device 2" oid="32" isChecked="false">
</node>
</node>
</node>
</node>
</mx:XMLList>
Вот мой тег дерева:
<mx:Tree id="mainTree" dataProvider="{treeData}" itemRenderer="TreeCheckBoxItemRenderer" labelField="@label" showRoot="false" width="100%" height="100%" itemClick="treeClick(event)" />