EXTJS 左边是树菜单,点击节点的时候,在右边的Grid显示相应的数据,就是根据节点ID刷新数据,这样的事件怎写呢?
解决方案 »
- 同志们帮我看看JS里面Function套Function的写法没有问题吧
- 关于省市联动的两个问题,困惑,望高手指教!
- checkbox如何返回0/1?
- 一个做网页的问题,向高手求助……!!
- 帮忙做一下JAVASCRIPT
- attachEvent的问题
- 买树,请卖树者foolfish (呆鱼) 进来
- js能对word进行操作嘛,如果可以,请赐教方法
- 看看这段JAVASCRIPT,表格里面动态增加行的功能,有一点需要加强的功能,进来看看,多谢了,多谢,有源文件!
- 急急急急急急急;;;js+html+css来实现使用键盘上的左右上下键来选中页面上的图片
- 诡异的JS,已经计划系统关机错误
- 求教关于dojo布局控件StackContainer的问题
节点点击事件中把id写到一个隐藏的表单元素中,提交表单,服务端获根据id查询数据
ajax方式:
节点点击事件中ajax请求,把id发送到服务端,服务端接收到请求,将查询结果返回到客户端,客户端在回调函数中获得查询结果,更新grid数据源
如:
children:[{
text:'jsp',
iconCls:'user',
leaf:true,
listeners: {
'click' : function (node, e) {
//这里面怎写呢?
}}
}] 然后把取得的节点传到后台
public Page pagedQuery(int pageNo, int pageSize,int deptno) throws Exception {
String sql = "SELECT top("+pageSize+") * FROM student WHERE id NOT IN (SELECT TOP("+pageNo+") id FROM student ) where deptno="+ deptno;
你这个应属于组件之间的数据传输,ExtJS的Store组件可以将其统一处理,如果你的grid表格里没有特殊的服务器请求(如果有,最好别写在tree的点击事件里,直接在Grid组件里写,减少对FWQ的直接请求数量),所以,树的点击事件可以不需要做成ajax请求。
我的想法是 1.将你所点击的节点的record传给Grid组件,2.让Grid的Store组件进行重新加载,3.在Grid渲染后执行加载事件。
以下是TreePanel点击事件,代码是我从自己项目中剪切下来的,给你做参考。重点在点击的时候,能够将节点record数据获取到.
注意:你的record里面不要直接用id作为键,否则可能会报个ext底层错误.this.contextTree = new Ext.tree.TreePanel( {
autoScroll : true,
border : false,
width : 200,
dataUrl : 'viewClientTreeData.action',
root : {
text : 'Client',
leaf : false
},
listeners : {
scope: this,
click : function(node) {
var jsonObj = this.treeNodeDataConfig(node.attributes);//对要传输的数据进行了重新处理,将要显示在Grid里的数据重新组装成JS Object,用
Ext.util.JSON.decode(jsonObj)方法转化(如果数据结构报错就用,不报错可以不用);
// 处理后的数据结构 var jsonObj = {"client_name":"ckk","email":'[email protected]',"age":12,"website":"www.ckk.com","level":1};
if (node.attributes.leaf != false) {
Ext.getCmp('_context_form_pane').add(new javascript.main.editGrid(jsonObj).show());
}
}
},
没有直接用GridPanel来写,以下是一段DataView组件代码,同样只供参考,树点击事件传过来的对象就是 data,如果硬是要一个GridPanel的,你继续追问,我待会写个。javascript.main.editGrid = function(data){
this.store = new Ext.data.JsonStore({
fields: [
{name: 'client_name'},
{name: 'age'},
{name: 'email'},
{name: 'level'},
{name: 'website'}
],
data: data
}) this.tpl = new Ext.XTemplate(
'<table>',
'<tr >',
'<td class="client-treetpl-tdText">姓名:</td>',
'<td class="client-treetpl-tdValue">{client_name}</td>',
'<td class="client-treetpl-tdText" style="margin-left:5%;">年龄:</td>',
'<td class="client-treetpl-tdValue">{age}</td>'
'</table>')
javascript.main.editGrid.superclass.constructor.call(this,{
title:data.client_name+'_'+data.c_id,
width:600,
closable:true,
height:300,
tpl:this.tpl,
id:'_'+data.c_id,
listeners:{
scope:this,
afterrender:function(){
//alert(Ext.util.JSON.encode(data))
this.tpl.append(this.getEl(),data);
}
}
})
}
Ext.extend(javascript.main.editGrid,Ext.DataView,{})
var root = new Ext.tree.AsyncTreeNode( {
text : root_deptname,
expanded : true,
id : root_deptid
});
var deptTree = new Ext.tree.TreePanel( {
loader : new Ext.tree.TreeLoader( {
baseAttrs : {},
dataUrl : 'stockssalesrecord.ered?reqCode=departmentTreeInit'
}),
root : root,
autoScroll : true,
animate : false,
useArrows : false,
border : false
});
// 监听下拉树的节点单击事件
deptTree.on('click', function(node) {
comboxWithTree.setValue(node.text);
Ext.getCmp("id_deptid").setValue(node.id);
comboxWithTree.collapse();
});
var comboxWithTree = new Ext.form.ComboBox(
{
id : 'id_deptname1',
hiddenname : 'deptid',
store : new Ext.data.SimpleStore({
fields : [],
data : [ [] ]
}),
editable : false,
value : ' ',
emptyText : '请选择...',
fieldLabel : '选择部门',
anchor : '100%',
mode : 'local',
triggerAction : 'all',
// labelStyle : micolor,
maxHeight : 390,
// 下拉框的显示模板,addDeptTreeDiv作为显示下拉树的容器
tpl : "<tpl for='.'><div style='height:390px'><div id='deptTreeDiv'></div></div></tpl>",
allowBlank : false,
onSelect : Ext.emptyFn
});
comboxWithTree.on('expand', function() {
// 将UI树挂到treeDiv容器
deptTree.render('deptTreeDiv');
deptTree.root.expand(); //只是第一次下拉会加载数据
// deptTree.root.reload(); // 每次下拉都会加载数据 });
点击事件在里面。