EXT.NET循环并且选中TreePanel的某些值

来源:互联网 发布:php面向对象接口 编辑:程序博客网 时间:2024/06/05 09:21

之前公司项目做了一个这个,不过我发现有个BUG,就是只能选到2级,然后在下级就不能选中了。不过我这人就是倔脾气来了就非要弄出来。可能一下方法不太完美,但是可以实现,欢迎大家提供更好的方法以及建议。

先说一说前台代码:

先是一个ext:DropDownField控件, <Component>里面嵌套了ext:TreePanel控件。下面只贴ext:TreePanel代码

<ext:TreePanel ID="OptionOrgTree" runat="server" AutoScroll="true" ContainerScroll="true"
                                        RootVisible="false" UseArrows="true" Animate="true" Height="280">
                                        <Store>
                                            <ext:TreeStore ID="OptionOrgStore" runat="server">
                                                <Proxy>
                                                    <ext:AjaxProxy Url="/Report/OrgProfit/GetOrgList">
                                                    </ext:AjaxProxy>
                                                </Proxy>
                                                <Parameters>
                                                    参数,你们懂的
                                                </Parameters>
                                                <Listeners>
                                                    <BeforeLoad Handler="SelectedCurrentNodes(App.OptionOrgTree, operation)" />
                                                    <Load Handler="SetDefaultNodes(App.OptionOrgTree,node)" />
                                                </Listeners>

                                            </ext:TreeStore>
                                        </Store>
                                        <Listeners>
                                            <CheckChange Fn="dbchangeFrom" />
                                           
<Load Handler="treeLoad(item,node,records,successful,options)" />
                                        </Listeners>
                                        <View>
                                            <ext:TreeView ID="TreeView1" runat="server" LoadMask="true" LoadingText="loading...">
                                            </ext:TreeView>
                                        </View>
                                        <SelectionModel>
                                            <ext:TreeSelectionModel ID="TreeSelectionModel3" runat="server" Mode="Single">
                                            </ext:TreeSelectionModel>
                                        </SelectionModel>
                                    </ext:TreePanel>

注意黄色的的事件,那才是此次重点。

treeLoad事件:

function treeLoad(item, node, records, successful, options) {           
            loadData();
        }
       
getOrgid(node);
    }

loadData事件主要是给TreePanel赋初始值:

var root = App.OptionOrgTree.getRootNode();

if (a[i].Key == "OrgID" && a[i].Value != null) {
 getChildNodesNuchecked(root);
App.ddfOrgNameId.setValue(a[i].Value, result.OrgName, true);


 遍历树形节点,并且不选中

function getChildNodesNuchecked(root) {
        for (var p = 0; p < root.childNodes.length; p++) {
            var item = root.childNodes[p]; item.set("checked", false);
            getChildNodesNuchecked(item);
        }
    }

然后看看我们最重要最关键的方法getOrgid(node);

首页第三级等更下级的机构选择
    function getOrgid(node) {   
            var result = parent.getSearchConfig();
            var a = Ext.decode(result.ProcParams);
            if (a.length > 0) {
                for (var i = 0; i < a.length; i++) {
                    if (a[i].Key == "OrgID" && a[i].Value != null) {
                        var orgIds = a[i].Value.split(',');
                        for (var j = 0; j < orgIds.length; j++) {
                            for (var p = 0; p < node.childNodes.length; p++) {
                                var item = node.childNodes[p];
                                if (item.data.id == orgIds[j])
                                    item.set("checked", true);
                            }
                        }
                    }
                }
            }

    }

其实不难看出,大家已经知道是并不是一开始的时候就去遍历树形节点去选中,而是展开树形节点的时候把当前节点传入。其实大家可以试着一加载节点的时候就去选中。因为我初学EXT.NET反复试了几次,它只能读取到已经展开或者展开过的节点,我不知道初始怎么让它全部展开然后又收缩,所以就用了这种比较逗比的方法。如果有时间我就研究研究如何一开始全部展开然后又收缩,到时候在更新这个文章。

0 0
原创粉丝点击