2

私はExtJS4.0.7とその標準MVCアーキテクチャを使用しています。storeカスタムとmodelクラスのグリッドがあります。データはを介してリモートでロードされますstore.load()ext-dev.js動的な依存関係の読み込みを伴うデバッグ目的で使用しています。

アプリはChromeのコンソールでエラーなしで正常に読み込まれます。しかし、問題は、モデルにどのフィールドがあるかに関係なく、ストア内のレコードにAJAX呼び出しによって提供されたものとまったく同じデータが含まれていることです。フィールドの名前を変更したり削除したりしようとしましたが、Extは注意を払っていません。

コンソールを使用してstoreオブジェクトを参照すると、すべてのレコードに、という名前の独自のカスタムランタイム生成モデルクラスがあることがわかりますExt.data.reader.Json-Modelext-gen1141。これが私のコードの要点です:

私のモデル:

Ext.define('MyApp.model.FooModel', {
    extend: 'Ext.data.Model',

    idProperty: 'column1',
    fields: [
        {name: 'column1', convert: function(value, record) {
            return value + ' TEST-TEST-TEST';
        }},
        'column2',
        'column3'
    ]
});

私の店:

Ext.define('MyApp.store.FooStore', {
    extend: 'Ext.data.Store',
    model: 'MyApp.model.FooModel',
    autoLoad: false,
    proxy: {
        type: 'ajax',
        url: '/blah/blah',
        reader: {
            type: 'json'
        }
    }
});

私のグリッド:

Ext.define('MyApp.view.FooGrid', {
    extend: 'Ext.grid.Panel',
    alias: 'fooGrid',
    store: 'FooStore',
    columns: [{
        text: 'Column 1',
        dataIndex: 'column1',
        flex: 1
    },{
        text: 'Column 2',
        dataIndex: 'column2',
        flex: 1
    },{
        text: 'Column 3',
        dataIndex: 'column3',
        flex: 1
    }]
});

私のコントローラー:

Ext.define('MyApp.controller.Foo', {
    extend: 'Ext.app.Controller',
    views: ['FooGridFrame'],
    models: ['FooModel'],
    stores: ['FooStore'],

    init: function() {
        this.control({
            'fooGrid': {
                activate: function(grid) {
                    grid.getStore().load();
                }
            }
        });
    }
});

何が間違っているのかわかりません。何か案は?

4

1 に答える 1

0

AJAXバックエンド(Ext3用に別の開発者によって作成された)がmetaDataプロパティを介していくつかの構成データを提供していたことが判明しました。StoreExtがこれに注意を払っていることを私は知りませんでした。私の問題は、metaDataプロパティを省略するようにバックエンドを更新することで解決しました。

おそらくmetaData、必要な適切な構成を提供するために更新することもできたでしょうが、すべてのUI構成をクライアントで実行するようにリファクタリングしています。

于 2012-05-24T19:13:28.760 に答える