dijit.tree.TreeStoreModel

The TreeStoreModel connects a data store with a single "root" item to a dijit.Tree.

An example might be an employee database where the company's CEO is the root item, and all other employees report directly or indirectly to the CEO.

Here's an example of a declarative initialization for a TreeStoreModel and for the data store that it connects to:

<div data-dojo-type="dojo/data/ItemFileWriteStore" data-dojo-id="store"
    data-dojo-props="url:'../tests/_data/treeTest.json'"></div>
<div data-dojo-type="dijit/tree/TreeStoreModel" data-dojo-id="model"
    data-dojo-props="childrenAttrs:'kids',
    store:store, query:{id:'root'}"></div>

A few things to note here:

  • The query {id:'root'}, when run against the data store, must return exactly one item
  • That item should have an attribute named "kids" with a list of children items

Here's a much more complicated where we've overridden the getChildren() method because in the data store a child references it's parent rather than vice-versa.

<div data-dojo-type="dijit/tree/TreeStoreModel" data-dojo-id="model" data-dojo-props="store:store">
    <script type="dojo/method" data-dojo-event="getChildren" data-dojo-args="item, onComplete">
        return store.fetch({query: {parent: store.getIdentity(item)}, onComplete: onComplete});
    </script>
    <script type="dojo/method" data-dojo-event="mayHaveChildren" data-dojo-args="item">
        var type = store.getValue(item, "type");
        return (type == "continent" || type == "country");
    </script>
</div>