Hi there,
I have a huge tree with many nodes. I have a existing hierarchy like this:
If I want to to add a node to the existing node "root-1" I have to reload the children of the "root-1"-node.
In the example there are about 200 nodes under the "root-1"-node. In our production environment there could me >1000 nodes in respect of the selected filters.
When calling reloadChildren it seems, that the current implementation does a full load of all children of the node. I have initialized a paged tree so there should be no reason to get all chidren of the node. Because the totalRows have changed (when adding a new node) I thought i have to call the reloadChildren method, but when calling it does fire >50 requests at the same time to the datasource.
In the example below I'm only calling reloadChildren without adding an additional node to the children of "root-1".
Only 12 nodes can be displayed at one time, so the first datasoruce-request should return enough nodes to display all needed nodes.
Is there a way to call reloadChildren without running into multiple datasource-requests for loading all children of "root-1"? Or maybe a way to fetch only the nodes, wich are needed for displaying?
I've tested this against the latest release and also with a version vom november 2015 and the behaviour is the same.
This is the code for reproduction
Best Regards
I have a huge tree with many nodes. I have a existing hierarchy like this:
If I want to to add a node to the existing node "root-1" I have to reload the children of the "root-1"-node.
In the example there are about 200 nodes under the "root-1"-node. In our production environment there could me >1000 nodes in respect of the selected filters.
When calling reloadChildren it seems, that the current implementation does a full load of all children of the node. I have initialized a paged tree so there should be no reason to get all chidren of the node. Because the totalRows have changed (when adding a new node) I thought i have to call the reloadChildren method, but when calling it does fire >50 requests at the same time to the datasource.
In the example below I'm only calling reloadChildren without adding an additional node to the children of "root-1".
Only 12 nodes can be displayed at one time, so the first datasoruce-request should return enough nodes to display all needed nodes.
Is there a way to call reloadChildren without running into multiple datasource-requests for loading all children of "root-1"? Or maybe a way to fetch only the nodes, wich are needed for displaying?
I've tested this against the latest release and also with a version vom november 2015 and the behaviour is the same.
This is the code for reproduction
Code:
isc.VLayout.create({ "ID" : "rootLayout_5", "width" : "100%", "height" : "100%", "autoDraw" : true, "hideUsingDisplayNone" : false, "leaveScrollbarGap" : false, "members" : [ isc.Button.create({ title: "reload children of node 'root-1'", width: 200, click:function(){ theTreeGrid.data.reloadChildren(theTreeGrid.data.findById("root-1")); }} ), isc.TreeGrid.create({ "ID" : "theTreeGrid", "width" : "100%", "height" : "300", "selectionType" : "multiple", "canEdit" : false, "showFilterEditor" : false, dataSource : isc.DataSource.create({ "fields" : [{ "name" : "treeGridGeneratedIndex", "primaryKey" : true, "hidden" : true, "canView" : false }, { "name" : "nameField", "title" : "Reason", "type" : "text" }, { "name" : "parentId", "rootValue" : "root", "foreignKey" : "treeGridGeneratedIndex", "hidden" : true } ], "dataFormat" : "json", "dataURL" : "http://www.devset.de/treegrid2.php", "transformRequest" : requestTransformer, "transformResponse" : responseTransformer, "recordXPath" : "\/resultData", useHttpProxy : false }), dataProperties : { openProperty : "isOpen", childrenProperty : "children", canReturnOpenFolders: true, progressiveLoading : false }, "autoFetchData" : true, "dataPageSize" : 50, "dataFetchMode" : "paged", "selectionProperty" : "isSelected", "fields" : [{ "name" : "nameField", "title" : "Reason", "type" : "text", "canEdit" : true, "canSort" : true }, { "name" : "lastField", "title" : "Name", "type" : "text", "canEdit" : true, "canSort" : true }, { "name" : "randomField", "title" : "random", "type" : "text", "canEdit" : true, "canSort" : true } ], "selectionProperty" : "isSelected", "members" : [] }) ] }); function requestTransformer(dataSourceRequest) { var operationType = { operationType : dataSourceRequest.operationType }; if (dataSourceRequest.operationType == "fetch") { var params = { delay: 300, sortBy : dataSourceRequest.sortBy, start : dataSourceRequest.startRow, end : dataSourceRequest.endRow }; } return isc.addProperties({}, operationType, dataSourceRequest.data, params); } function responseTransformer(dataSourceResponse, dataSourceRequest, jsonData) { if (dataSourceRequest.operationType == "fetch") { dataSourceResponse.totalRows = jsonData.totalRows; dataSourceResponse.endRow = jsonData.endRow; dataSourceResponse.startRow = jsonData.startRow; }; }
Comment