Extjs4 hasMany()关系未从Store的'data'属性加载

时间:2012-10-11 12:37:01

标签: model extjs4 extjs

我的Extjs4 Store类的data属性描述了一个对象层次结构。我把它作为我商店的数据属性,因为数据是静态的;没有必要额外调用服务器来填充商店。我以前做过这个,但这次我的很多关系都没有填充。我已经尝试了各种方法来解决这个问题,但我很难过。你会看看它是否遗漏了什么吗?

对象的关系是: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类(第三层嵌套)

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
  2. MarineFormFields
  3. MarineFormField
  4. 添加ID
  5. 对根商店的data字段
  6. 中的任何拼写错误进行三重检查

    感谢您抽出宝贵时间!

1 个答案:

答案 0 :(得分:0)

在我看来,你所缺少的就是你的商店配置(或者你不太可能忘记加载商店):

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

This JsFiddle几乎是包含此更改的代码,它似乎工作正常。