Skip to main content
December 31, 2009
Question

CFTree refresh

  • December 31, 2009
  • 1 reply
  • 1433 views

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

This topic has been closed for replies.

1 reply

Participating Frequently
June 2, 2010

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

June 4, 2010

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/

Participating Frequently
July 8, 2010

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.