ExtJS学习1--treepanel的几个问题,导盲贴
2015-01-14 02:51
330 查看
做后台系统少不了组织架构的树状图,各种拖放,各种右键等等都是很正常的,下面我来谈谈自己在学习ext4.2遇到的几个问题。
1.拖放时叶子不能append如何解决?
答:这是Ext内部限制,只有在leaf:true的状态下才能添加子节点,so我们可以在拖动到该节点是修改其leaf为true,关键是触发事件是什么呢,通过API文档就可以发现view的beforedrop事件符合要求,代码如下:
this.control({
'department treeview[itemId=deptView]':{
beforedrop:this.changeLeaf
}}
changeLeaf: function(node, data, overModel, dropPosition, dropHandler) {
if(overModel.get('leaf')){
overModel.set('leaf',false);
overModel.set('loaded',true);
}
return true;
},
这里是controller里的写法,不懂百度就懂,或者tree.view.on("beforedrop",function(........)){....}
2.treepanel不能正常显示?
答:这里解释其中一种比较bug的原因,ext4.2版本中必须要设置treestore中的root才能正常显示,别问我问什么。
3.treepanel的getChecked()方法如何使用?
答:这里我们必须明确一件事情,getChecked()中返回选中的记录是指带有checkBox的treepanel被勾选的项,换句话说,不带有checkBox的tree,通过鼠标点击选中时,使用getChecked()是会返回null的,这个一定要分清。那么,下面问题来了
4.如何获取treepanel中鼠标单击选中的项呢,若还需要得到这一项的父节点呢?
答:前者很简单,由于treepanel也是panel,所以通过grid.getSelectionModel().selected.get(0)就可以得到行的record,难点在如何得到父节点,这里先说明一点,treepanel使用独有的nodeinterface,里面根据model的属性生成对应属性并保存value,不懂请百度。而我们上面获取的是model类型,是不存在父节点这一类说法的,所以我想了一个比较有趣的方法来获取,至于有更好的方法请留言(通过click,itemcontextmenu等事件参数自动代入不算),不多说,直接上代码:
var record=grid.getSelectionModel().selected.get(0);
var rNode=grid.getRootNode();
var cNode=rNode.findChild('id',record.data['id'],true);
var fatherNode=cNode.parentNode;
alert(fatherNode.data.name);
略略解释下,第二行为得到根节点,也就是root 啦,findChild方法的参数为属性名,属性值,是否找子节点的子节点,不懂请看API,一定要看。最后注意nodeinterface类型的读取属性是 .data.属性名
先写到这里,拖放的问题等遇到有价值的再补上,如有错误,也请留言指出,多多指教
1.拖放时叶子不能append如何解决?
答:这是Ext内部限制,只有在leaf:true的状态下才能添加子节点,so我们可以在拖动到该节点是修改其leaf为true,关键是触发事件是什么呢,通过API文档就可以发现view的beforedrop事件符合要求,代码如下:
this.control({
'department treeview[itemId=deptView]':{
beforedrop:this.changeLeaf
}}
changeLeaf: function(node, data, overModel, dropPosition, dropHandler) {
if(overModel.get('leaf')){
overModel.set('leaf',false);
overModel.set('loaded',true);
}
return true;
},
这里是controller里的写法,不懂百度就懂,或者tree.view.on("beforedrop",function(........)){....}
2.treepanel不能正常显示?
答:这里解释其中一种比较bug的原因,ext4.2版本中必须要设置treestore中的root才能正常显示,别问我问什么。
3.treepanel的getChecked()方法如何使用?
答:这里我们必须明确一件事情,getChecked()中返回选中的记录是指带有checkBox的treepanel被勾选的项,换句话说,不带有checkBox的tree,通过鼠标点击选中时,使用getChecked()是会返回null的,这个一定要分清。那么,下面问题来了
4.如何获取treepanel中鼠标单击选中的项呢,若还需要得到这一项的父节点呢?
答:前者很简单,由于treepanel也是panel,所以通过grid.getSelectionModel().selected.get(0)就可以得到行的record,难点在如何得到父节点,这里先说明一点,treepanel使用独有的nodeinterface,里面根据model的属性生成对应属性并保存value,不懂请百度。而我们上面获取的是model类型,是不存在父节点这一类说法的,所以我想了一个比较有趣的方法来获取,至于有更好的方法请留言(通过click,itemcontextmenu等事件参数自动代入不算),不多说,直接上代码:
var record=grid.getSelectionModel().selected.get(0);
var rNode=grid.getRootNode();
var cNode=rNode.findChild('id',record.data['id'],true);
var fatherNode=cNode.parentNode;
alert(fatherNode.data.name);
略略解释下,第二行为得到根节点,也就是root 啦,findChild方法的参数为属性名,属性值,是否找子节点的子节点,不懂请看API,一定要看。最后注意nodeinterface类型的读取属性是 .data.属性名
先写到这里,拖放的问题等遇到有价值的再补上,如有错误,也请留言指出,多多指教
相关文章推荐
- 学习笔记-extjs treepanel
- ExtJS学习之TreePanel
- extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
- 解决ExtJS TreePanel 的 iconCls设置问题
- extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
- ExtJS学习之TreePanel
- Extjs学习笔记--Ext.tree.Panel
- [转]关于 extjs treepanel 复选框 选中 父节点 的问题
- ExtJs 4.x 学习小记:动态添加节点到Ext.tree.Panel
- extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
- Extjs treePanel 的treestore重复加载问题解决
- extjs 在IE8下TreePanel第一次无法显示问题
- Extjs学习笔记-1.TreePanel+TabPanel简单的树形菜单
- extjs4学习资料(gridpanel布局问题)
- extjs.treePanel在ie9下滚动条的显示问题
- 关于 extjs treepanel 复选框 选中 父节点 的问题
- EXTJS中TreePanel和TabPanel配合使用的问题
- 学习ASP过程中,遇到的几个问题
- 从ACCESS转到学习SQL SERVER所遇到的几个问题
- 学习ExtJs的几个资源(好多是中文的哦)