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