从extjs中的数据存储区创建Accordion布局项

时间:2013-08-02 01:48:11

标签: extjs

我有一个布局符合的面板。我有一个数据存储区,它以json格式从服务器获取数据并映射到模型。我得到的数据是该模型的列表。现在在我看来,我需要访问商店并获取所有记录,对于每条记录,我需要创建一个Panel并将其添加到父Panel。

我的商店

Ext.define('NOS.store.ResultGroupsStore', {
    extend: 'Ext.data.Store',
    requires : ['NOS.model.ResultGroup'], 
    model: 'NOS.model.ResultGroup',
    fields:['groupName'],
    alias: 'widget.resultStore',
//  autoLoad: true,
    proxy: {
        type: 'ajax',
        url: 'showResult.nos',
        reader: {
            type: 'json'
        }
    }
});

我的观点

Ext.require('Ext.panel.Panel');
Ext.define('NOS.view.ResultView' ,{
    extend: 'Ext.panel.Panel',
    alias:'widget.results',
    title: 'My title',
    layout:'accordion',
    items:null,
    initComponent : function() {
        console.log("reached in view initialise");
        results = Ext.create('NOS.store.ResultGroupsStore');
        results.load();
        results.each(function(aResultGroup, index) {
            console.log('Record ' + index);
        });
        console.log("End in view initialise");
        this.callParent(arguments);
    },
});

但它永远不会进入上面的循环。我确信数据已正确加载到商店,因为当我使用grid.Panel并映射列时,它会呈现数据。

请帮助!!

1 个答案:

答案 0 :(得分:1)

存储加载是异步的,当您在商店上进行迭代时,它尚未加载,因此商店为空。你需要在商店回调中做到这一点。

Ext.require('Ext.panel.Panel');
Ext.define('NOS.view.ResultView' ,{
    extend: 'Ext.panel.Panel',
    alias:'widget.results',
    title: 'My title',
    layout:'accordion',
    items:null,
    initComponent : function() {
        var results = this.results = Ext.create('NOS.store.ResultGroupsStore');
        results.on('load', this.onStoreLoad, this, {
            single: true
        });
        results.load();
        this.callParent(arguments);
    },

    onStoreLoad: function() {
        this.store.each(function(rec){

        });
    }
});