parantId reader

by Johan Vandeplas

HTML

<script src="http://cdn.sencha.com/ext/gpl/4.2.1/ext-all-dev.js"></script>
<link rel="stylesheet" href="http://cdn.sencha.com/ext/gpl/4.2.1/resources/css/ext-all.css">

JavaScript

var buildTree = function (rawData, idProperty, parentIdProperty) {
        var findById = function (children, id) {
                for (var i = 0; i < children.length; i++) {
                    var c = children[i];
                    if (c[idProperty] == id) {
                        return c;
                    } else if (c.children && c.children.length > 0) {
                        var r = findById(c.children, id);
                        if (r !== -1) {
                            return r;
                        }
                    }
                }
                return -1;
            };

        for (var i = rawData.length - 1; i >= 0; i--) {
            if (rawData[i][parentIdProperty] !== undefined && rawData[i][parentIdProperty] !== null) {
                var parentNode = findById(rawData, rawData[i][parentIdProperty]);
                if (parentNode.children) {
                    parentNode.children.push(rawData[i]);
                } else {
                    parentNode.children = [rawData[i]];
                }
                rawData.splice(i, 1);
            }
        }
        return rawData;

    }
//getResponseData in the reader

console.log(buildTree([
                { id: 1, name: 'nodeA' },
                { id: 2, name: 'nodeB' },
                { id: 3, name: 'nodeC', setLabel: 2},
                { id: 4, name: 'nodeD', setLabel: 2},
                { id: 5, name: 'nodeE'},
                { id: 6, name: 'nodeF', setLabel: 4},
                { id: 7, name: 'nodeG'}
            ], 'id', 'setLabel'));
    
Ext.define('BCS.data.proxy.AjaxWithPayload', {
    extend:  Ext.data.proxy.Ajax ,
    alias: 'proxy.ajaxWithPayload',

    actionMethods: {
        create: "POST",
        destroy: "POST",
        read: "POST",
        update: "POST"
    },
    buildRequest: function(operation) {
        var me = this,
            request = me.callParent([operation]);
        request.jsonData = me.jsonData;
        return request;
   ...