0

Extjs4 Storeクラスのdataプロパティは、オブジェクト階層を記述します。データは静的であるため、これをストアのデータプロパティとして配置します。ストアにデータを入力するためにサーバーに追加の呼び出しを行う必要はありません。これは以前に行ったことがありますが、今回はhasManyの関係が設定されていません。これを修正するためにさまざまな方法を試しましたが、困惑しています。私が何かを逃していないかどうかを確認するためにそれを見ていただけませんか?

オブジェクトの関係は次のとおりです。 MarineForm has MarineFormSections which has MarineFormFields

データプロパティを持つストア

Ext.define('MAP.store.MarineFormStore', {
    extend: 'Ext.data.Store',
    model: 'MAP.model.MarineForm',
    data:[
        {
            species:'Mackerel',
            gear:null,
            sections:[
                {
                    name:'General Info',
                    formFields:[
                        {
                            xtype:'textfield',
                            name:'firstField',
                            allowBlank:false,
                            fieldLabel:'First Field'
                        }
                    ]
                }
            ]
        }
    ]

});

ルートモデル

Ext.define('MAP.model.MarineForm', {
    extend: 'Ext.data.Model',

    fields: [
        {name: 'species', type: 'string'},
        {name: 'gear', type: 'string'}
    ],

    hasMany: {
        model: 'MAP.model.MarineFormSection',
        name: 'sections'
    }

});

hasManyクラス

Ext.define('MAP.model.MarineFormSection', {
    extend: 'Ext.data.Model',

    fields: [
        'id',
        {name: 'name', type: 'string'}
    ],

    hasMany: {
        model: 'MAP.model.MarineFormField',
        name: 'formFields'
    }

});

hasManyのhasManyクラス(ネストされた3番目のレイヤー)

Ext.define('MAP.model.MarineFormField', {
    extend: 'Ext.data.Model',

    fields: [
        'name',
        {name:'allowBlank', type:'boolean'},
        'fieldLabel',
        'xtype',
        //next ones are for comboboxes. Not used all the time. -jg
        'store',
        'valueField',
        'displayField'
    ]
});

Chrome内のストアにクエリを実行した結果は次のとおりです。

rootStore = Ext.getStore('MarineFormStore') // -> the store
sections = rootStore.getAt(0).sections() // -> hasMany store
sections.getCount() // -> 0

私はもう試した:

  1. MarineFormField hasManyのブロックを削除するMarineFormFields
  2. IDをに追加するMarineFormField
  3. ルートストアのdataフィールドにタイプミスがないかトリプルチェック

お時間を割いていただきありがとうございます!

4

1 に答える 1

0

あなたが見逃しているのは、あなたのストア設定にあるこれだけのようです(または、ストアをロードするのを忘れただけではありません):

proxy: {
    type: 'memory',
    reader: {
        type: 'json',
    }
},    

この JsFiddleは、この変更が含まれているほとんどのコードであり、問​​題なく動作するようです。

于 2012-10-11T13:17:39.817 に答える