Hello,
I currently have a lot of troubles trying to map/wrap/use Kendo Components for JQuery in an Angular2+ Application with Typescript. This time I have to implement the kendo treeView (and no I am not allowed to use other products and I can not wait till the treeView is implemented for Angular).
So far I can display the treeview component with data from the backend. Now I am struggling with the kendo.ui.TreeViewSelectEvent handling.
This is a shortend version of my so far approach:
001./// <reference path="../../../../node_modules/@types/kendo-ui/index.d.ts" />002. 003.// import ...004. 005.declare var kendo: any;006. 007./**008. * Class declaring the TreeViewComponent component009. */010.@Component({011. 'selector': 'dba-folders',012. 'templateUrl': './folders.component.html',013. 'styleUrls': ['./folders.component.less']014.})015.export class FoldersComponent implements OnInit, OnDestroy {016. 017. @ViewChild('treeView') treeViewEl: ElementRef;018. 019. /** Member containing the TreeView data */020. private treeData: kendo.data.HierarchicalDataSource;021. /** Member holding the id of the currently selected folder */022. private selectedFolderId: Guid;023. /** Member holding the folderData for treeData*/024. private folderData: Array<Folder>;025. 026. public constructor(private foldersService: FoldersService,027. private router: Router) { }028. 029. public ngOnInit(): void {030. this.generateFolderTree();031. }032. 033. public ngOnDestroy(): void {034. kendo.destroy(this.treeViewEl.nativeElement);035. }036. 037. private generateFolderTree(): void {038. this.foldersService.getFolders().subscribe((result: Folder) => {039. this.folderData = new Array<Folder>();040. for (let folder of result.subFolders) {041. this.folderData.push(folder);042. }043. this.initTreeData(); // initialize Tree Data044. kendo.jQuery(this.treeViewEl.nativeElement).kendoTreeView(this.treeViewOptions()); // set TreeViewOptions for Kendo tree045. }, (err) => {046. // handle error047. });048. }049. 050. /**051. * Call onTreeSelect method after selecting TreeView item to pass id to mediator052. * @param {kendo.ui.TreeViewSelectEvent} e053. * @memberof FoldersComponent054. */055. public onFolderSelect(e: kendo.ui.TreeViewSelectEvent): void {056. const uid = $(e.node).closest('li').data('uid');057. // this.selectedFolderId = this.getFolderWithNodeUidFromTreeView(uid);058. let data: Array<MetadataVariant> = new Array<MetadataVariant>();059. 060. console.log('UID: ' + uid);061. 062. this.foldersService.getGridData(uid, this.router.url).subscribe((result: Array<MetadataVariant>) => {063. data = result;064. // send data065. }, (err) => {066. // handle error067. });068. }069. 070. private getFolderWithNodeUidFromTreeView(uid: string): Guid {071. const id: Guid = '';072. // ??? HERE I NEED THE HELP ???073. return id;074. }075. 076. 077. /**078. * Call initTreeData to initialize data in TreeView079. */080. private initTreeData(): void {081. this.treeData = new kendo.data.HierarchicalDataSource({082. data: this.folderData,083. schema: {084. model: {085. id: 'id',086. children: 'subFolders'087. }088. }089. });090. }091. 092. /**093. * Call treeViewOptions to initialize options in TreeView094. */095. private treeViewOptions(): kendo.ui.TreeViewOptions {096. const options: kendo.ui.TreeViewOptions = {097. dataSource: this.treeData,098. dataTextField: ['name'],099. dragAndDrop: true,100. loadOnDemand: true,101. select: this.onFolderSelect102. };103. return options;104. }105. 106.}
Thank you all in advance! I am happy for any ideas!
Jessica
