[code="java"]
打开界面前有个参数Aid extjs 如何通过这个参数获得tree 拿到这个树后(带checkbox的) 更改后 如何把被选中的tree id 传给action 是不是需要 loader.on什么的 怎么写
Ext.onReady(function() {
Ext.BLANK_IMAGE_URL = "/dtjcsy/pages/js/ext/resources/images/default/s.gif";
var Tree= Ext.tree;
var tree = new Tree.TreePanel({
el:'tree-div',
autoScroll:true,
animate:true,
enableDD:true,
frame:false,
border:false,
useArrows:true,
checkModel:'cascade',
onlyLeafCheckable:false,
rootVisible:true,
bodyStyle:'background-color:#b4d5f5',
containerScroll: true,
loader: new Tree.TreeLoader({
dataUrl:'rightAction.action',
baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI }
})
});
var root =new Tree.AsyncTreeNode({
text:"可用权限列表",
draggable:false,
id:'0'
});
tree.setRootNode(root);
tree.render();
root.expand();
});[/code]
[quote]我现在做的是一个添加页 除了这个树 还有其他的字段 都在一个form里 [/quote]
既然是多个组件的值,只能你自己负责获取所有的值,然后组装请求参数了。
[quote]
打开界面前有个参数Aid extjs 如何通过这个参数获得tree
[/quote]
这是什么意思?tree直接通过new不就有了,和这个参数有什么关系。问题说明清楚一点。
你参数是用来控制什么的?
[quote]
这个参数Aid 决定了 这棵树都有哪些节点
[/quote]
那你只需要在[code="java"]dataUrl:'rightAction.action', [/code]把这个参数传到服务器,服务器返回相应的节点数据,这样tree就构造好了。
你这里是两个问题:[quote]点一个连接 拿到这个参数 进入到Tree的界面 这个树通过这个参数 获得节点数据[/quote]
首先,这个返回数据,构建Tree界面你是否成功呢?
[quote]checked后 如何再通过这个参数 讲选择的节点id 传给Action action怎么获得[/quote]
节点选中后再把选择的id传到服务器端,直接获取每个节点ID,以数组形式或这连接字符串都可以。
“如何再通过这个参数”这个句话是什么意思呢?上传选中节点的ID和之前的这个参数有什么关系?
[quote]我的意思是 如何上传选中的节点和这个参数[/quote]
这要看你想在什么时候上传啊!是在选中某个节点时呢,还是把所有节点都选好,再通过某个操作完成,不管哪种,你只需要获取你需要的参数,发一个ajax请求即可,没什么特别。
[quote]下面是我的代码 需要添加什么东西才能 动过参数Aid获得节点 然后收集选中的节点 我就是个新手 从听说EXTJS到现在才2周 [/quote]
初始显示的时候你只要把参数传到tree的请求上就可以了,服务器那边判断那些节点数据返回:
[code="java"]dataUrl:'rightAction.action?aid=' + , [/code]
这样不就把需要的节点数据取回来了。然后在tree上面绑定“checkchange”事件,当选中是把该节点的id记录下来,然后你最后总有一个操作会向服务器提供的吧,把这里记录的id作为请求参数一起传到服务器不就可以了。
[code="java"]
下面是我的代码 需要添加什么东西才能 动过参数Aid获得节点 然后收集选中的节点 我就是个新手 从听说EXTJS到现在才2周
Ext.onReady(function() {
Ext.BLANK_IMAGE_URL = "/dtjcsy/pages/js/ext/resources/images/default/s.gif";
var Tree= Ext.tree;
var tree = new Tree.TreePanel({
el:'tree-div',
autoScroll:true,
animate:true,
enableDD:true,
frame:false,
border:false,
useArrows:true,
checkModel:'cascade',
onlyLeafCheckable:false,
rootVisible:true,
bodyStyle:'background-color:#b4d5f5',
listeners : {
checkchange : function(node , checked ) {
if (checked) {
var id = node.attributes.id;
//记录这个ID到一个全局变量,或者tree的属性上。
}
}
},
containerScroll: true,
loader: new Tree.TreeLoader({
dataUrl:'rightAction.action',
baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI }
})
});
var root =new Tree.AsyncTreeNode({
text:"可用权限列表",
draggable:false,
id:'0'
});
tree.setRootNode(root);
tree.render();
root.expand();
});
[/code]
增加listener就可以了啊,像上面这样,找不到办法是多看看API,js是事件驱动的,这里我们很自然相对会有什么回调事件可用。
[quote]怎么把 所有的被选中的checkbox的id放到一个集合里 还是说 这个 var id 就是所有节点的id的集合[/quote]
这里获取的只是一个节点,你获取了一个以后把它保存到全局变量也行,这样你提交请求的时候不就可以获取所有的选中节点了吗?
不保存全局变量也行,看你提交请求在哪里进行,主要是考虑提交请求时获取的方便性,哪里方便,保存到哪里。
[quote]
var check = [];
listeners : {
checkchange : function(node , checked ) {
if (checked) {
var id = node.attributes.id;
check[check.length++]=id;
}
}
},
[/quote]
应该可以。
[code="java"]
通过form submit 提交后 后台
private String check;
getter setter
但是 check 还是空的啊
private list check 也一样
[/code]
还是采用字符的形式提交吧。你提交参数是怎么写的?你需要把数组连接成字符:
[code="java"]
xxx.actioin?checks=check.join('-')
[/code]
然后服务器端通过
[code="java"] private String checks;[/code]
获取,然后把字符串split成数组。