Copy link to clipboard
Copied
Hello
I have a CFTree bind with a CFC (classic) :
<cfform name="formRootNode" format="html" style="margin:0px;">
<cftree name="RootNode" height="400" width="200" format="html">
<cftreeitem bind="cfc:_cfc.cTree.getNodes({cftreeitemvalue},{cftreeitempath})">
</cftree>
<cfinput type="button" name="btnRefresh" value="test" onclick="javascript:(ColdFusion.Tree.refresh('RootNode'));" />
</cfform>
but when I click on the refresh button i have an error and i don't know why :
" _1b.parent is null " (/CFIDE/scripts/ajax/package/cftree.js, line 219)
Does anyone know how to fix it ?
PS : I work with coldfusion 9
Copy link to clipboard
Copied
I was having the same problem during the last days and hacking into /CFIDE/scripts/ajax/package/cftree.js is the only solution I can come up with:
Look for the function "ColdFusion.Tree.formPath" (line 214) and manipulate it as following:
/*************************/
ColdFusion.Tree.formPath=function(_1b,_1c){
var _1d=ColdFusion.objectCache[_1b.tree.id+"collection"];
if(_1d.completepath==true&&_1b.isRoot()){
return "";
}else{
if(_1b.parent==null) return ""; // Adding this line removes the error
if(_1d.completepath==false&&_1b.parent.isRoot()){
return "";
}
}
if(!_1c){
_1c=_1b;
}
var _1e=ColdFusion.Tree.formPath(_1b.parent,_1c);
_1e=_1e+_1b.data.id;
if(_1c.data.id!=_1b.data.id){
_1e=_1e+_1d.delimiter;
}
return _1e;
};
/*************************/
Makes the <cftree> refresh, but closes all nodes on my binded tree. But that's probably how it's supposed to be... Hopefully others find this helpful.
Cheers, Boris
Edit:
You could probably just add this function to your regular JavaScript and override the CF-generated one. Manipulating CFIDE could affect others of your application.
Message was edited by: Schwarz Boris
Copy link to clipboard
Copied
hi Boris, thanks for your answer but i have found a better way to solve my problem :
when i update my tree (change or delete a node for exemple), i call a js function :
ColdFusion.Tree.loadNodes([],{'treeid':"RootNode",'parent':mynodeparent});
mynodeparent.expand();
var :
var oTree = ColdFusion.Tree.getTreeObject('RootNode');
var currentNode=oTree._cf_node;
var mynode=oTree.getNodeByProperty('id',currentNode);
var mynodeparent = mynode.parent;
LoadNodes refresh only the parent node (and all their children inside), then i expand the parent (so that will not close my other nodes )
\0/
Copy link to clipboard
Copied
Awesomeness! That's even cooler than ColdFusion.Tree.refresh. The only issue I'm having is when I need to reload a node that hasn't got a Parent-Node.
I guess I'll have to go with ColdFusion.Tree.refresh in that special case.
But anyway, thanks for your solution.