Thanks for your help, Martin!

I tried to follow your idea but it didn't work either. So, I investigated
further and I just noticed a problem with my tree controller. 

I don't know if it comes from my code (or if it's a bug from the
TreeController class). When I update my tree model by populating with the
new kids, the tree widget isn't refreshed correctly and I have to specify an
additional call to a private method of the tree controller
"__updateTreeChildren" to make it happen. 

I verified that I wasn't mistaken: the content of the kids after updating
the model and the new kids were hence present but the tree didn't reload. 

As a reminder, my code is like this one:

var tree = new qx.ui.tree.Tree();
var tree.controller = new qx.data.controller.Tree(null, tree, "kids",
"name");

var store = new qx.data.store.Json();

store.addListener("loaded", function(ev) 
{
        var sel = this.controller.getSelection();
                                
        if (sel.getLength()==0)
        {
                this.controller.setModel(ev.getData().getTree());
                var root = this.getRoot();
                if (root) 
                {
                        tree.addToSelection(root);
                        root.setOpen(true);
                }
        }
        else
        {
                var currentNode = 
this.tree.controller.getSelection().getItem(0);
                currentNode.setKids(ev.getData().getTree().getKids());
                
                // forces update
               
tree.controller.__updateTreeChildren(tree.getSelection()[0],currentNode);
        }
});


Am I wrong or the extra function call is mandatory in my case (not a bug) ?

Regards,

Benoît.

PS: In fact, I just realised my store is nearly unnecessary as I manage all
by the loaded event (a simple remote.request is good enough).


Martin Wittemann wrote:
> 
> Good morning Benoît,
> 
> no i get what you are planing to do. Thanks for the detailed  
> description. I guess the best way to load the tree structure on demand  
> is to always keep the binding to the initial model and just add the  
> models loaded after the initial model to the initial model:
> 
> initial model (m1):
> a
> - a1
> - a2
> 
> now you click on a1 and load that (m2):
> 
> a1
> - a11
> - a12
> 
> You have two different models but you can just grab the kids of the  
> second model and set them in the first model.
> 
> m1.getKids()[0].setKids(m2.getKids());
> 
> That should keep the whole structure and just add the kids.
> 
> The list binding could always take the kids of the current selection.
> 
> treeController.bind("selection.kids", listController, "model");
> 
> Have you seen the qooxdoo feed reader example? This is based on the  
> data binding features as well. Perhaps you can get some ideas from  
> that code.
> 
> Best,
> Martin
> 
> 
> Am 25.07.2009 um 12:06 schrieb benco:
> 
>>
>> Hello Martin,
>>
>> Sorry for the lack of precise informations. OK, I explain :). I work  
>> on a
>> sort of file manager. It has two parts : a tree and a list (like any  
>> file
>> manager window). In order to manage and retreive all the relevant  
>> datas, I
>> use a store and link the model to the two widget controllers (the  
>> tree and
>> the list).
>>
>> My model definition (could evolve but it follows mainly the examples  
>> on the
>> demo page):
>>
>> {tree:{name:"",kids:[]},currentfolder:[{name:"",type:"folder| 
>> file"},...]}
>>
>> In an initialisation step, the tree must load the first and second  
>> level. In
>> the following steps, I delete this behaviour because the goal is to  
>> display
>> the currentfolder in the list and populate the tree with additional
>> sub-folders when we select a tree node.
>>
>> But I don't know how to add the new sub-folders in the tree (except  
>> if I
>> worked without the new binding features). When I select a treenode,  
>> the json
>> store is reloaded with additional parameters. The result is in the  
>> same kind
>> of the above described model except that {tree:{name:"",kids:[]}} only
>> concerns the selected folder in the tree. So, as the name doesn't  
>> change (I
>> don't plan to manage concurrence yet), I only need to bind the kids  
>> of the
>> model store to the kids of the selection in the tree controller.
>>
>> But "this.store.bind('model.tree.kids', this.tree.controller,
>> 'selection[0].kids'))" seems not to work. Anyway, the content isn't
>> refreshed (I don't notice any add). And furthermore, the previous  
>> selected
>> treenode isn't anymore selected after the bind assignment.
>>
>> Regarding my second question, I already noticed that it was  
>> qx.data.Array
>> based. In fact you can consider it as a complement to my first  
>> question. I
>> tried to do this kind of operation as the
>> "this.store.bind('model.tree.kids', this.tree.controller,
>> 'selection[0].kids'))" seemed not work:
>>
>> this.store.addListener("loaded", function(ev)
>> {
>>      
>>      ...
>>      
>>      ...
>>      
>>      var target = this.tree.controller.getSelection();
>>      target.splice(0,1,ev.getTree());
>>      
>>      (or)
>>      
>>      var target = this.tree.controller.getSelection();
>>      target.setName(ev.getTree().getName());
>>      target.setKids(ev.getTree().getKids());
>>      
>>      ...
>>      
>> }, this);
>>
>>
>> I hope it's more clear for you :). Have a nice weekend!
>>
>> Best,
>>
>> Benoît.
>>
>>
>> Martin Wittemann wrote:
>>>
>>> Hello Benoît,
>>>
>>> I have to admit that I don't get your use case right. You want to use
>>> "model.tree" on the first load as model for the tree controller and  
>>> on
>>> the second load, you want to use "model.tree.kids"? Do you want to  
>>> set
>>> the selection with the second bind? :
>>>> this.store.bind('model.tree.kids', this.tree.controller,
>>>> 'selection[0].kids')); // this would'nt work
>>>
>>> Because thats what the code tries to do.
>>>
>>> Perhaps you could tell me what you want to achieve with the code?
>>> Maybe i can help you more if I know what you want to do.
>>>
>>> To your second question: You can just change the model and the data
>>> binding will populate the the tree. As the model is a set of qooxdoo
>>> objects with data arrays, you can just manipulate these model objects
>>> and that should do the job. :)
>>>
>>> Best,
>>> Martin
>>>
>>>
>>> Am 24.07.2009 um 16:08 schrieb benco:
>>>
>>>>
>>>> Hello,
>>>>
>>>> I'm a bit stuck and I really need some help here.
>>>>
>>>> I'm working on a Tree that can be loaded progressively on deploy and
>>>> selection events. I also would like using the new binding features
>>>> with that
>>>> tree (namely the Tree Controller and the Json Store).
>>>>
>>>> The problem is I don't know how to manage the bindings correctly.
>>>>
>>>> In the first step (first launch), I bind the store with the tree
>>>> controller.
>>>> Then, the behaviour changes. The store should be binded to the tree
>>>> controller "selection[0]". I really don't know how to do this in a
>>>> simple
>>>> way.
>>>>
>>>> If it's not possible ... never mind (I'll use the default tree
>>>> behaviours
>>>> and functions). But It would be useful and cool.
>>>>
>>>> Here's a code example:
>>>>
>>>> this.tree.controller = new qx.data.controller.Tree(null,
>>>> this.browser.tree,
>>>> "kids", "name");
>>>>
>>>> this.store = new qx.data.store.Json();
>>>>
>>>> this.tree.bindId =
>>>> store.bind('model.tree',this.tree.controller,'model');
>>>>
>>>> this.store.addListener("loaded", function(ev)
>>>> {
>>>>    // first loading
>>>>    if (this.tree.bindId)
>>>>    {
>>>>            this.store.removeBinding(this.tree.bindId);
>>>>            this.tree.bindId=null;
>>>>                                    
>>>>            var root = this.tree.getRoot();
>>>>            if (root)
>>>>            {
>>>>                    this.tree.addToSelection(root);
>>>>                    root.setOpen(true);
>>>>            }
>>>>    }
>>>>    else
>>>>    {
>>>>            this.store.bind('model.tree.kids',this.tree.controller,
>>>> 'selection[0].kids')); // this would'nt work
>>>>    }
>>>> }, this.browser);
>>>>
>>>> Furthermore, I'd like to know how I can complete/populate a partial
>>>> zone of
>>>> a model in the tree controller by new additional datas without
>>>> resetting it
>>>> completely... Any Ideas ?
>>>>
>>>> Thanks in advance,
>>>>
>>>> Best,
>>>>
>>>> Benoît.
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/Progressive-Tree-on-selection-and-or-deployement-%2B-the-new-binding-features-tp24645160p24645160.html
>>>> Sent from the qooxdoo-devel mailing list archive at Nabble.com.
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> _______________________________________________
>>>> qooxdoo-devel mailing list
>>>> [email protected]
>>>> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> _______________________________________________
>>> qooxdoo-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Progressive-Tree-on-selection-and-or-deployement-%2B-the-new-binding-features-tp24645160p24656522.html
>> Sent from the qooxdoo-devel mailing list archive at Nabble.com.
>>
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> qooxdoo-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
> 
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> qooxdoo-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Progressive-Tree-on-selection-and-or-deployement-%2B-the-new-binding-features-tp24645160p24684991.html
Sent from the qooxdoo-devel mailing list archive at Nabble.com.


------------------------------------------------------------------------------
_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to