问题描述:我在页面加载的时候写了一个treepanel,并配置了相应的store,store的autoload设置为false,每次由button的时间触发加载,但每次store的load方法总是不能够在treepanel中加载出数据。
找了很多博客看了许多人的解决方法,最后发现竟然是autoload的问题。只是简单地把autoload设为true,reload方法就执行到了,之前设置为false,请求到后台数据,且有返回,并且store里面也没有获取到值,但是数据怎么也绑不到treepanel中去。
下面是正确的代码:
var treeStore1 = Ext.create('Ext.data.TreeStore', {
id: 'treestore1',
pageSize: 50,
autoLoad: true,
//加载的时候不需要数据的话,随便写一个url,不会返回数据
proxy: {
type: 'ajax',
url: 'Tracing.ashx?action=Query',
async: false
}
});
var Billtree = Ext.create('Ext.tree.Panel', {
id: 'Billtree',
title: "生产流程信息",
textAlign: 'center',
collapsible: false,
rootVisible: false,//是否显示根节点
leaf:false,
displayField: 'value',
valueField: 'uid',
store: treeStore1,
listeners: {
itemclick: function () {
}
},
columns: [
{
xtype: 'treecolumn',
header: '生产用料信息',
dataIndex: 'value',
sortable: false,
width:480
}
]
});
var btnSearch = Ext.create('Ext.Button', {
text: '查询',
id: 'btnSearch',
iconCls: 'unknown-button', style: 'border:solid 1px gray;height:30px;width:60px;',
textAlign: 'center',
handler: function () {
//每次load之后,store里面data会有数据,但是显示的数据之前的不会被清除,所有的数据会全部显示,需要清除treepanel里面的数据
//清空treepanel里面的数据
Billtree.getRootNode().removeAll();
//清空store里面的数据
treeStore1.clearData();
var SNNo = Ext.getCmp("SNNo").value;
var MaterialBatch = Ext.getCmp("MaterialBatch").value;
var ProductionBillNo = Ext.getCmp("ProductionBillNo").value;
var TransferCard = Ext.getCmp("TransferCard").value;
var $url = 'Tracing.ashx?action=QueryRoot';
var $params = { snno: SNNo, materialbatch: MaterialBatch, productbillno: ProductionBillNo, transfercard: TransferCard };
//设置代理,执行load方法,重新加载数据到store
treeStore1.setProxy({
extraParams: $params, url: $url, type:'ajax'
});
treeStore1.setAutoSync(false);
treeStore1.commitChanges();
treeStore1.reload();
}
});