Search code examples
extjsextjs2

How to Extend the existing classes in Ext.js version 2.3.0


There is no proper material for ext js 2.3.0 extending classes. Please provide the required info or links for extending the extjs classes for version2.3.0


Solution

  • I would look at the documentation here http://dev.sencha.com/deploy/ext-2.3.0/docs/

    Then I would look at the Ext singleton object which expose both extend and override methods which should allow you to do what you're after.

    This is an example of using the extend method from the demo found here http://dev.sencha.com/deploy/yui-ext/examples/grid/array-grid.html The parent page of this is http://dev.sencha.com/deploy/yui-ext/examples/samples.html

    Here in the below code, I extend Ext.grid.GridPanel to make MyGridPanel which then implements a new method called yourMethod which will then alert a message when the grid is clicked.

    Ext.onReady(function () {
    
        // NOTE: This is an example showing simple state management. During development,
        // it is generally best to disable state management as dynamically-generated ids
        // can change across page loads, leading to unpredictable results.  The developer
        // should ensure that stable state ids are set for stateful components in real apps.
        Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
    
        var myData = [
            ['3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'],
            ['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'],
            ['Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'],
            ['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am'],
            ['American International Group, Inc.', 64.13, 0.31, 0.49, '9/1 12:00am'],
            ['AT&T Inc.', 31.61, -0.48, -1.54, '9/1 12:00am'],
            ['Boeing Co.', 75.43, 0.53, 0.71, '9/1 12:00am'],
            ['Caterpillar Inc.', 67.27, 0.92, 1.39, '9/1 12:00am'],
            ['Citigroup, Inc.', 49.37, 0.02, 0.04, '9/1 12:00am'],
            ['E.I. du Pont de Nemours and Company', 40.48, 0.51, 1.28, '9/1 12:00am'],
            ['Exxon Mobil Corp', 68.1, -0.43, -0.64, '9/1 12:00am'],
            ['General Electric Company', 34.14, -0.08, -0.23, '9/1 12:00am'],
            ['General Motors Corporation', 30.27, 1.09, 3.74, '9/1 12:00am'],
            ['Hewlett-Packard Co.', 36.53, -0.03, -0.08, '9/1 12:00am'],
            ['Honeywell Intl Inc', 38.77, 0.05, 0.13, '9/1 12:00am'],
            ['Intel Corporation', 19.88, 0.31, 1.58, '9/1 12:00am'],
            ['International Business Machines', 81.41, 0.44, 0.54, '9/1 12:00am'],
            ['Johnson & Johnson', 64.72, 0.06, 0.09, '9/1 12:00am'],
            ['JP Morgan & Chase & Co', 45.73, 0.07, 0.15, '9/1 12:00am'],
            ['McDonald\'s Corporation', 36.76, 0.86, 2.40, '9/1 12:00am'],
            ['Merck & Co., Inc.', 40.96, 0.41, 1.01, '9/1 12:00am'],
            ['Microsoft Corporation', 25.84, 0.14, 0.54, '9/1 12:00am'],
            ['Pfizer Inc', 27.96, 0.4, 1.45, '9/1 12:00am'],
            ['The Coca-Cola Company', 45.07, 0.26, 0.58, '9/1 12:00am'],
            ['The Home Depot, Inc.', 34.64, 0.35, 1.02, '9/1 12:00am'],
            ['The Procter & Gamble Company', 61.91, 0.01, 0.02, '9/1 12:00am'],
            ['United Technologies Corporation', 63.26, 0.55, 0.88, '9/1 12:00am'],
            ['Verizon Communications', 35.57, 0.39, 1.11, '9/1 12:00am'],
            ['Wal-Mart Stores, Inc.', 45.45, 0.73, 1.63, '9/1 12:00am']
        ];
    
        // example of custom renderer function
        function change(val) {
            if (val > 0) {
                return '<span style="color:green;">' + val + '</span>';
            } else if (val < 0) {
                return '<span style="color:red;">' + val + '</span>';
            }
            return val;
        }
    
        // example of custom renderer function
        function pctChange(val) {
            if (val > 0) {
                return '<span style="color:green;">' + val + '%</span>';
            } else if (val < 0) {
                return '<span style="color:red;">' + val + '%</span>';
            }
            return val;
        }
    
        // create the data store
        var store = new Ext.data.SimpleStore({
            fields: [{
                name: 'company'
            }, {
                name: 'price',
                type: 'float'
            }, {
                name: 'change',
                type: 'float'
            }, {
                name: 'pctChange',
                type: 'float'
            }, {
                name: 'lastChange',
                type: 'date',
                dateFormat: 'n/j h:ia'
            }]
        });
        store.loadData(myData);
    
        MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
            constructor: function (config) {
                // Your preprocessing here
                MyGridPanel.superclass.constructor.apply(this, arguments);
                // Your postprocessing here
            },
    
            yourMethod: function () {
                alert('this is a new method'); // etc.
            }
        });
        // create the Grid
        var grid = new MyGridPanel({
            store: store,
            columns: [{
                id: 'company',
                header: "Company",
                width: 160,
                sortable: true,
                dataIndex: 'company'
            }, {
                header: "Price",
                width: 75,
                sortable: true,
                renderer: 'usMoney',
                dataIndex: 'price'
            }, {
                header: "Change",
                width: 75,
                sortable: true,
                renderer: change,
                dataIndex: 'change'
            }, {
                header: "% Change",
                width: 75,
                sortable: true,
                renderer: pctChange,
                dataIndex: 'pctChange'
            }, {
                header: "Last Updated",
                width: 85,
                sortable: true,
                renderer: Ext.util.Format.dateRenderer('m/d/Y'),
                dataIndex: 'lastChange'
            }],
            stripeRows: true,
            autoExpandColumn: 'company',
            height: 350,
            width: 600,
            title: 'Array Grid'
        });
    
        grid.render('grid-example');
        grid.on('click', function (e) {
            console.log(e, this.yourMethod());
        });
    });
    

    Demo: http://jsfiddle.net/robschmuecker/84Lmu21L/