我有一个布局符合的面板。我有一个数据存储区,它以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并映射列时,它会呈现数据。
请帮助!!
答案 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){
});
}
});