0

次の単純な HTML があります。ExtJS 4 を使用すると動作しますが、ExtJS 4.2 を使用すると動作しません。

どちらの場合も、Web サービスが呼び出されていますが、ExtJS 4.2 を使用している場合store.dataは空です。

これが問題だと思います (ExtJS 4.2 ではサポートされていないものがありますが、何が原因かはわかりません):

Ext.define('Ext.AspWebAjaxProxy', {
        extend: 'Ext.data.proxy.Ajax',
        require: 'Ext.data',

        buildRequest: function (operation) {
            var params = Ext.applyIf(operation.params || {}, this.extraParams || {}),
                                request;
            params = Ext.applyIf(params, this.getParams(params, operation));
            if (operation.id && !params.id) {
                params.id = operation.id;
            }

            params = Ext.JSON.encode(params);

            request = Ext.create('Ext.data.Request', {
                params: params,
                action: operation.action,
                records: operation.records,
                operation: operation,
                url: operation.url
            });
            request.url = this.buildUrl(request);
            operation.request = request;
            return request;
        }
    });

そして、これは完全なコードです:

<body>
<div id="ext-grid">
</div>
<script type="text/javascript">
    Ext.require([
            'Ext.grid.*',
            'Ext.data.*',
            'Ext.panel.*',
            'Ext.layout.container.Border'
        ]);

    Ext.define('Ext.AspWebAjaxProxy', {
        extend: 'Ext.data.proxy.Ajax',
        require: 'Ext.data',

        buildRequest: function (operation) {
            var params = Ext.applyIf(operation.params || {}, this.extraParams || {}),
                                request;
            params = Ext.applyIf(params, this.getParams(params, operation));
            if (operation.id && !params.id) {
                params.id = operation.id;
            }

            params = Ext.JSON.encode(params);

            request = Ext.create('Ext.data.Request', {
                params: params,
                action: operation.action,
                records: operation.records,
                operation: operation,
                url: operation.url
            });
            request.url = this.buildUrl(request);
            operation.request = request;
            return request;
        }
    });

    Ext.onReady(function () {
        Ext.define('Actors', {
            extend: 'Ext.data.Model',
            fields: ['FirstName', 'LastName', 'EmailAddress', 'Salary']
        });


        store = new Ext.data.Store(
            {
                proxy: new Ext.AspWebAjaxProxy({
                    url: 'service.asmx/LoadRecords',
                    actionMethods: {
                        read: 'POST'
                    },
                    reader: {
                        type: 'json',
                        model: 'Actors',
                        root: 'd'
                    },
                    headers: {
                        'Content-Type': 'application/json; charset=utf-8'
                    }
                })
            });


        var grid = Ext.create('Ext.grid.Panel', {
            store: store,
            columns: [
                        { text: 'FirstName', dataIndex: 'FirstName', width: 280, sortable: true },
                        { text: 'LastName', dataIndex: 'LastName', sortable: true },
                        { text: 'EmailAddress', dataIndex: 'EmailAddress', width: 150, sortable: true },
                        { text: 'Salary', dataIndex: 'Salary', sortable: true }
                       ],
            renderTo: 'ext-grid'
        });

        store.load();
    });
</script>
</body>

これはJSONです:

 {
    "d": [
        {
            "__type": "CrystalBall.service+Record",
            "FirstName": "Palash",
            "LastName": "Debnath",
            "EmailAddress": "palash@yahoo.com",
            "Salary": 100
        },
        {
            "__type": "CrystalBall.service+Record",
            "FirstName": "Pritam",
            "LastName": "Debnath",
            "EmailAddress": "pritam@yahoo.com",
            "Salary": 200
        }
    ]
}
4

1 に答える 1

0

問題は、メソッド buildRequest を再定義することだと思います。おそらく、この関数の内部はバージョン 4.0 と 4.2 の間で変更されています。

ExtJs 4.2 は、リクエストの送信方法を構成するための非常に幅広い可能性を提供しているため、その機能を再定義する必要はありません。

于 2013-10-23T20:59:47.403 に答える