您的位置:首页 > Web前端 > JavaScript

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.属性名

先写到这里,拖放的问题等遇到有价值的再补上,如有错误,也请留言指出,多多指教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: