/**
 * This class is used as a base class from which to derive Models used in Trees.
 */
Ext.define('Ext.data.TreeModel', {
    extend: 'Ext.data.Model',
    requires: [
        'Ext.data.NodeInterface'
    ],
 
    mixins: [
        'Ext.mixin.Queryable'
    ],
 
    /**
     * @cfg {String} [childType]
     * The class name of child nodes to create when reading child nodes from
     * raw data. By default the type configured into the TreeStore is used.
     *
     * This is one way of creating heterogeneous nodes in a tree.
     *
     * To do this through data types passed from the server, use the
     * {@link Ext.data.reader.Reader#typeProperty}.
     *
     * for example in the case of a hidden root node, you'd use the default type at level zero.
     * See {@link Ext.tree.Panel TreePanel}'s documentation for an example.
     *
     * *Important*
     * If you are using this declaration on your tree models, and have a
     * {@link Ext.tree.Panel#rootVisible hidden root node}, you MUST create a special root model
     * definition which declares the type of its children.
     *
     * If you allow the TreeStore to create a root node of the same type as the first level of
     * *visible* nodes then the reader will atempt to read the wrong type of child node for the
     * root.
     *
     * Example:
     *
     *     Ext.define('myApp.World', {
     *         childType: 'Territory'
     *     });
     *
     *     ...
     *
     *     store: {
     *         id: 'myTreeStore',
     *         model: 'myApp.World' // The hidden root will know to create 'Territory' type children
     *     }
     *
     * If the root is hidden, and the first level of visible nodes are going to be the
     * `myApp.Territory` class, then the hidden root must not be of the `myApp.Territory` class.
     * Otherwise, it would try to read in the territory data as its childType - most likely
     * 'Country'.
     *
     */
 
    getRefItems: function() {
        return this.childNodes;
    },
 
    getRefOwner: function() {
        return this.parentNode;
    },
 
    statics: {
        defaultProxy: 'memory'
    }
}, function() {
    Ext.data.NodeInterface.decorate(this);
});