由于thread似乎非常过时,让我问一个类似的问题。所以,我有一个store
定义如下:
Ext.define('GeoServer.store.ObjectsStore', {
extend: 'Ext.data.TreeStore',
requires: ['GeoServer.model.ObjectsModel'],
model: 'GeoServer.model.ObjectsModel',
autoLoad: false,
proxy: {
type: 'ajax',
url: 'controller/MapsHandler.php',
extraParams: {
action: 'listObjects'
}
}
});
如您所见,autoLoad
设置为false
。这是因为我不想在页面加载时加载几十个商店,我只想在需要时加载它们。例如,在这种情况下,当我在里面显示一个treepanel
的窗口时,我需要加载这个商店。我展示这个窗口的方式是:
Ext.create("Ext.window.Window",{
title: "Objects",
height: size.height,
width: size.width,
constrainHeader:true,
layout:"fit",
maximizable:true,
items:[{
xtype: 'treepanel',
rootVisible: false,
scrollable: true,
itemId: 'Objects',
store: 'ObjectsStore',
border: false,
autoLoad: true // has no effect
}]
}).show();
但令人讨厌的是,当窗口第一次显示时,即使我看到服务器请求被触发,树也不会填充数据。但是,当窗口显示第二,第三等时间时,一切都很好。那么,第一次有什么特别之处以及如何以正确的方式使用这个autoLoad
属性?
答案 0 :(得分:3)
如果您希望在应用程序启动时加载商店,则需要在商店中自动加载true。
你有两个机会,在商店负载上显示窗口:
var store=Ext.getStore('ObjectsStore'),
view=this.getView();
view.mask('loading');
store.on('load',function(){
view.unmask();
YourWindow.show();
});
store.load();
或者您可以尝试在渲染侦听器之前加载商店:
listeners:{
beforerender: function(){
Ext.getStore('ObjectsStore').load();
}
}
在我看来,最好的解决方案是第一个,Store执行异步加载,因此您总是会看到您的树形面板填充在他的负载上