这个有点小复杂啊,但是基本都是利用在地址栏url中附加信息来获取的:
首先是在treenode的nodeClick事件中传递nodeid,在新增出来的tab内设置一个iframe,在其src属性中带上?id=nodeid。
在iframe内的javascript脚本中利用document.URL再来提取参数,最后在传递给对应的后台action
主要代码如下:
//为Tab控件对应到具体的树形节点点击事件
leftmenu.on("nodeClick", function(nodeAttr) {
mainTab.loadTab(nodeAttr);
});
在loadTab内设置iframe
loadTab : function(node) {
var n = this.getComponent(node.id);
if (n) {
this.setActiveTab(n);
} else {
var c = {
id : node.id,
title : node.text,
closable : true,
layout : 'fit'
};
var page = this.findPage(node.id);
var pn = this.findPanel(node.id);
n = this.add(pn ? new pn(c) : Ext.apply(c, {
//autoLoad : {url : page, scripts : true}
html : "<iframe width=100% height=100% frameborder=0 src='" + page + "?id="+ node.id +"'/>"
}
));
n.show().doLayout();
}
if (n.ds)
n.ds.load({params:{start:0, limit:10}});
}
在iframe内的javascript脚本中提取参数:
var location = document.URL;
var paramArray = location.split('?');
var param = paramArray[1];
在Ext.data.Store中传递给相应的action:
var ds = new Ext.data.Store({
reader: reader,
proxy : new Ext.data.HttpProxy({ url : 'ReadToCaseGrid.do?' + param}),
autoLoad : true
});
在后台的代码中得到参数:
String params = request.getParameter("id");
String pro_no = (params.split("_"))[0];
String mod_no = (params.split("_"))[1];
System.out.println(pro_no + " " + mod_no);