Extjs 4.2.1-配置自动加载:false失败
我定义了一个Extjs 4.2.1-配置自动加载:false失败,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,我定义了一个treepanelextendextend:'Ext.tree.Panel',它具有initComponent函数,如 Ext.define('Example', { extend: 'Ext.tree.Panel', title: 'Example', useArrows:false, rootVisible: false, border: false, initComponent: function () { v
treepanel
extendextend:'Ext.tree.Panel'
,它具有initComponent函数,如
Ext.define('Example', {
extend: 'Ext.tree.Panel',
title: 'Example',
useArrows:false,
rootVisible: false,
border: false,
initComponent: function () {
var store = Ext.create('Ext.data.TreeStore', {
fields: [
{name: 'id', type: 'string'},
{name: 'text', type: 'string'}
],
autoLoad : false, // not working
proxy: {
type: 'ajax',
url: 'data.php',
reader: {
type: 'json',
root: 'results'
}
}
});
this.store = store;
this.callParent(arguments);
}
});
我尝试设置autoLoad:false
,但在创建treepanel
当我尝试配置下面的代码来存储时,然后自动加载:false
工作,但加载后我的treepanel
为空
root: {
text: 'Ext JS',
id: 'src',
expanded: false // this
}
如果不使用root
config-like,我的json很好,并且可以正常工作
({ "results": [
{
id : '1' ,
text : '1',
expanded: true,
results :[{
id : '2' ,
text : '2',
leaf:true
}]
},{
id : '3' ,
text : '3',
leaf:true
}]
})
如何修复此问题,谢谢。您必须覆盖
Ext.tree.Panel.setRootNode
metod以考虑商店的自动加载属性
下面的示例使用ExtJS v4.2.2进行测试
Ext.define('Example', {
extend: 'Ext.tree.Panel',
title: 'Example',
useArrows:false,
rootVisible: false,
border: false,
/**
* Override.
*/
setRootNode: function() {
if (this.getStore().autoLoad) {
this.callParent(arguments);
}
},
initComponent: function () {
var store = Ext.create('Ext.data.TreeStore', {
fields: [
{name: 'id', type: 'string'},
{name: 'text', type: 'string'}
],
autoLoad : false,
proxy: {
type: 'ajax',
url: '/data.php',
reader: {
type: 'json',
root: 'results'
}
}
});
this.store = store;
this.callParent(arguments);
}
});
Ext.onReady(function(){
var tree = Ext.create('Example', {
renderTo: Ext.getBody(),
width: 300,
height: 300
});
tree.getStore().load();
});
老实说,你可能只是在找queryMode:“本地”,我不是100%的,它对这个有用,但我会这么做
我一直在组合框上使用它,它强制本地商店管理(关闭自动加载)我不知道为什么“自动加载:false;”不起作用。
但是您可以阻止自动加载为在treepanel中添加'root'配置。不是在树顶。
而且load()工作正常
{
xtype: 'treepanel',
.....
root: {
loaded: true;
}
}
这会奏效的
var myTreeStore = Ext.create('Ext.data.TreeStore', {
fields: [ ... ],
proxy: { ... },
root: {
loaded: true;
}
});
这是行不通的
祝你好运。自动加载属性仅绑定到存储本身。我猜在你的例子中,一个组件触发了负载。如果您想要完全控制,您可以使用beforeload
事件检查每个加载,如果无效则返回false
@sra如何检查无效
,您的意思是什么?但是为什么我的代码失败,自动加载:false
不起作用:(请参阅文档以了解注意,如果true
,则存储将在创建后加载。只创建没有树面板的存储,您将看到您的存储在创建后不会加载。@sra如果在加载前使用我想这很难捕捉。我使用根:{results:[]}
在store
中,然后自动加载:false
工作,但当我load()时
mytreepanel
为空?这是4.2.2中的错误吗?这在4.1.1中没有发生me@HDave似乎是这样。表和树的视图进行了轻微的重构。是的,这很有效。在我看来,这是一个奇怪的副作用或错误?。最后,我将相同的数据发送到存储区。在Extjs 5.1.0中对此进行了测试。