gpt4 book ai didi

javascript - ExtJS。在渲染器上加载商店

转载 作者:行者123 更新时间:2023-11-30 11:48:04 25 4
gpt4 key购买 nike

自此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 属性?

最佳答案

如果您希望商店在应用程序启动时加载,您需要在商店上自动加载 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 做一个异步加载,所以你总是会看到你的树面板在他的负载上填充

关于javascript - ExtJS。在渲染器上加载商店,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40278264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com