Thanks  Derrell,

Here is the running code:

                        var mod = tree.getDataModel(), dat = mod.getData();
                        for (var i = 0; i < dat.length; i++) {
                                var d = dat[i];
                                if (d && d.columnData && d.columnData[1] ==
goToItem) {
                                        while (1) {
                                                var parent = d.parentNodeId;
                                                if (!parent) {
                                                        break;
                                                }
                                                d = dat[parent];
                                                d.bOpened = true;
                                        }
                                        mod.setData();
                                        var row = mod.getNodeRowMap()[i];
                                        if (row != null) {
                                               
tree.getSelectionModel().setSelectionInterval(row, row);
                                                //tree.scrollCellVisible(0,
row);
                                        }
                                        break;
                                }

Now I'm not getting an exception inside nodeToggleOpened because of a
missing nodeId.

The nodeId index inside _nodeArr is already documented in
SimpleTreeDataModel.js!
I've added the 2nd line.

 *   nodeId         : 42,   // The index in _nodeArr, useful to event
listeners.  
 *                          // This property is missing for nodes inside
closed ones.



Derrell Lipman wrote:
> 
> On 9/27/07, dperez <[EMAIL PROTECTED]> wrote:
>>
>>
>> Thanks Derrell for your quick answer.
>> What I'm trying to do is on load to select initially an item.
>> This is the code:
>>
>>                         var mod = tree.getDataModel(), dat = mod.getData
>> ();
>>                         for (var i = 0; i < dat.length; i++) {
>>                                 var d = dat[i];
>>                                 if (d && d.columnData && d.columnData[1]
>> == goToItem) {
>>                                         while (1) {
>>                                                 var parent =
>> d.parentNodeId;
>>                                                 if (!parent) {
>>                                                         break;
>>                                                 }
>>                                                 d = dat[parent];
>>                                                 if (!d.bOpened) {  //
>> HERE
>> IS WHERE I'M FINDING d.nodeId==null
>>
>> tree.nodeToggleOpened(d);
>>                                                 }
>>                                         }
>>                                         var row = mod.getNodeRowMap()[i];
>>                                         if (row != null) {
>>                                                
>> tree.getSelectionModel().setSelectionInterval(row,
>> row);
>>                                                
>> //tree.scrollCellVisible(0,
>> row);
>>                                         }
>>                                         break;
>>                                 }
>>
>> Probably I will have to open first the ancestors that are less nested.
>>
> 
> All right.  Yes, you need to open ancestors.  You can recursively follow
> d.parentNodeId to do so.  When you call tree.nodeToggleOpened(d), it will
> have no immediate effect if ancestors aren't already opened, so you'll
> want
> to open them first.  You may want to manually manipulate the ancestors'
> bOpened flag rather than calling nodeToggleOpened() on each one because
> the
> latter recalculates the rendered row array on each call, and you need that
> only once when you're all done with the recursive calls.  At the end of
> your
> recursive calls, you can then issue a single mod.setData() call to
> rerender
> everything.
> 
> Secondly, you can take advantage of a currently undocumented (but should
> be
> documented) feature: the index of the node in the data model is its
> nodeId!
> This means that your loop variable i is actually nodeId.  That's probably
> the key piece of information that you required.  The reason that nodeId is
> added when the row is rendered is that the index in the rowArr has no
> relation to the node id, so the nodeId field is needed if one wants to be
> able to find the node id given a row (e.g. via a click).
> 

-- 
View this message in context: 
http://www.nabble.com/nodeId-missing-in-a-TreeVirtual-tf4528232.html#a12923146
Sent from the qooxdoo-devel mailing list archive at Nabble.com.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to