Start Building Professional
Web Apps Today


 
Categories Question details Back To List
Question  posted by Michael Chetock on Nov 14, 2008 07:54
open dhtmlx forum
Tree state - Line 1965 'tree' is null or not an object

When I try to save the tree state with "sample 1", the code works fine. However, when I try to save the tree state with "sample 2" code I get the following error "Line 1965 'tree' is null or not an object".

The only difference in the two sample is that in sample 2 I name the tree object oTreeMenus instead of tree.

Question 1 - Does the tree object always have to be named "tree"?

Question 2 - If so how is it possible for me to with more than one tree on a page?

Question 3 - The way I currently am going about placing multiple tree controls on a page is to declare 2 global variables oTree1, oTree2 and then I can get a handle on those objects later when I submit the page, but if I always have to name my tree objects "tree", what is the best way to get a handle on those items later when I want to submit the page?

This only became an issue when I tried using loadOpenStates() function. Prior to that I was always able to name my tree object whatever I wanted.

-------------
Sample 1
-------------
tree = new dhtmlXTreeObject("divMenuTree","100%","100%",0);
tree.setImagePath("../../DHTMLXSuite/imgs/");
tree.enableCheckBoxes(1);
tree.enableThreeStateCheckboxes(true);
tree.loadXML("../BusinessLogic/BL_DHTMLXDataProcessor.php?caller=P_RolePrivileges&action=getMenus&roleId=" + roleId, function(){tree.loadOpenStates()});
tree.attachEvent("onOpenEnd",function(){
tree.saveOpenStates();
});

-------------
Sample 2
-------------
oTreeMenus = new dhtmlXTreeObject("divMenuTree","100%","100%",0);
oTreeMenus.setImagePath("../../DHTMLXSuite/imgs/");
oTreeMenus.enableCheckBoxes(1);
oTreeMenus.enableThreeStateCheckboxes(true);
oTreeMenus.loadXML("../BusinessLogic/BL_DHTMLXDataProcessor.php?caller=P_RolePrivileges&action=getMenus&roleId=" + roleId, function(){oTreeMenus.loadOpenStates()});
oTreeMenus.attachEvent("onOpenEnd",function(){
oTreeMenus.saveOpenStates();
});
Answer posted by Support on Nov 14, 2008 07:56
There was a bug in original release , which cause problem with state saving, when tree object named differently. 
The issue already fixed in latest build
      http://dhtmlx.com/docs/news/index.shtml?show=35
If you by some reason can't update to latest build - please contact us directly at support@dhtmlx.com we will provide a separate fix. 
Answer posted by Michael Chetock on Nov 14, 2008 12:01

Ok.  I downloaded and installed the newest bug fixes.  The error is no longer present.  However, when I place two trees on the same page, the folder tree states seem to be mutually exclusive now.  When I click on oTreeMenus and oTreeDocLib, it only saves the state of the last tree I click on.

example 1 - click on oTreeMenus and submit -> it will save state of oTreeMenu

example 2 - click on oTreeDocLib and submit -> it will save state of oTreeDocLib

example 3 - first click on oTreeMenus and then click on oTreeDocLib -> only oTreeDocLib state is saved

example 4 - first click o oTreeDocLib and then click on oTreeMenus -> only oTreeMenus state is saved

 

/**
* @desc Initialize the dhtmlxTree for menus tab
*/
function initializeMenuTree()

    oTreeMenus = new dhtmlXTreeObject("divMenuTree","100%","100%",0);
    oTreeMenus.setImagePath("../../DHTMLXSuite/imgs/");
    oTreeMenus.enableCheckBoxes(1);
    oTreeMenus.enableThreeStateCheckboxes(true);
    oTreeMenus.enableTreeImages(false);
    oTreeMenus.loadXML("../BusinessLogic/BL_DHTMLXDataProcessor.php?caller=P_RolePrivileges&action=getMenus&roleId=" + roleId, function(){oTreeMenus.loadOpenStates()});
    oTreeMenus.attachEvent("onOpenEnd",function(){
    oTreeMenus.saveOpenStates();
    });
}

/**
* @desc Initialize the dhtmlxTree for document library folder tab
*/
function initializeDocumentLibraryFolderTree()
{
    oTreeDocLib = new dhtmlXTreeObject("divDocumentLibraryFolderTree","100%","100%",0);
    oTreeDocLib.setImagePath("../../DHTMLXSuite/imgs/");
    oTreeDocLib.enableCheckBoxes(1);
    oTreeDocLib.enableThreeStateCheckboxes(true);
    oTreeDocLib.loadXML("../BusinessLogic/BL_DHTMLXDataProcessor.php?caller=P_RolePrivileges&action=getDocLibFolders&roleId=" + roleId, function(){oTreeDocLib.loadOpenStates()});
    oTreeDocLib.attachEvent("onOpenEnd",function(){
    oTreeDocLib.saveOpenStates();
    });
}

Answer posted by Michael Chetock on Nov 18, 2008 06:20
Has this been confirmed?
Answer posted by Support on Nov 18, 2008 07:16
Both - saveOpenStates and loadOpenStates allow to provide a name of saving as parameter, if you want to save setting for different tree, you need to use those commands with different names, in other case settings will be overwritten. 
Answer posted by Michael on Nov 18, 2008 07:36
Thank you.  That worked.