expand() {
        return new Promise((resolve, reject) => {
            const allow = (this.hasChildren() || (this._tree.isDynamic && this.children === true));

            if (allow && (this.collapsed() || this.hidden())) {
                this.state('collapsed', false);
                this.state('hidden', false);

                this._tree.emit('node.expanded', this);

                if (this._tree.isDynamic && this.children === true) {
                    this.loadChildren().then(resolve).catch(reject);
                }
                else {
                    this.context().applyChanges();
                    resolve(this);
                }
            }
            else {
                // Resolve immediately
                resolve(this);
            }
        });
    }
Expand this node.

@return {Promise<TreeNode>} Promise resolved on successful load and expand of children.