ExtJS学习1--treepanel的几个问题,导盲贴

做后台系统少不了组织架构的树状图,各种拖放,各种右键等等都是很正常的,下面我来谈谈自己在学习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.属性名


先写到这里,拖放的问题等遇到有价值的再补上,如有错误,也请留言指出,多多指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值