0

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

我的商店

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 并映射列时,它会呈现数据。

请帮忙!!

4

1 回答 1

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){

        });
    }
});
于 2013-08-02T03:06:00.207 回答