FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 5990|回复: 8
打印 上一主题 下一主题

关于“树形菜单+手风琴式菜单”菜单的问题!

[复制链接]
跳转到指定楼层
楼主
发表于 2012-3-25 12:20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教个问题,我在后台绑定“树形菜单+手风琴式菜单”做菜单,要怎么裁定单击菜单打开的也在新的面板里面呢?我看了你的那个JS文件,可是我的TREE是在后台直接生成的,这要怎么做才能绑定你的那个脚本呢?这是的生成菜单的代码:  
    private void InitMenu()
        {
            ExtAspNet.Accordion accordion = new ExtAspNet.Accordion();
            Region2.Items.Add(accordion);
            accordion.ShowBorder = false;
            accordion.ShowHeader = false;
            try
            {
                //获取菜单中的所有数据
                DataTable Dt_TotleMenu = SelectAll().Tables[0];
                //取出所有父节点 因为父节点的Menu_Fid=0
                DataRow[] drMenu = Dt_TotleMenu.Select("PMenuCode=0");
                //构建父节点的table
                DataTable LeftMenuTable = new DataTable();
                //克隆一下解构
                LeftMenuTable = drMenu[0].Table.Clone();
                //导入数据
                foreach (DataRow dr in drMenu)
                {
                    LeftMenuTable.ImportRow(dr);
                }
                //如果存在父节点
                if (LeftMenuTable.Rows.Count != 0)
                {
                    //遍历拼接html 根据第一篇观察和抽取HTML的功夫
                    for (int i = 0; i < LeftMenuTable.Rows.Count; i++)
                    {
                        ExtAspNet.AccordionPane pane = new ExtAspNet.AccordionPane();
                        accordion.Panes.Add(pane);
                        pane.Title = LeftMenuTable.Rows[i]["MenuName"].ToString();
                        pane.ShowBorder = false;
                        //获取当前父节点的所有子节点
                        DataRow[] drSencondMenu = Dt_TotleMenu.Select("PMenuCode='" + LeftMenuTable.Rows[i]["MenuCode"] + "'");
                        DataTable SecondTable = new DataTable();
                        SecondTable = drSencondMenu[0].Table.Clone();
                        foreach (DataRow dr in drSencondMenu)
                        {
                            SecondTable.ImportRow(dr);
                        }
                        //如果子存在子节点
                        if (SecondTable.Rows.Count != 0)
                        {
                            ExtAspNet.Tree tree = new ExtAspNet.Tree();
                            pane.Items.Add(tree);
                            tree.ShowBorder = false;
                            tree.ShowHeader = false;
                            tree.AutoScroll = true;
                            tree.EnableArrows = true;
                           
                            //遍历拼接子节点的HTML
                            foreach (DataRow row in SecondTable.Rows)
                            {
                                ExtAspNet.TreeNode node = new ExtAspNet.TreeNode();
                                node.Text = row["MenuName"].ToString();
                                node.NavigateUrl = row["FileName"].ToString();
                                tree.Nodes.Add(node);
                            }
                            tree.
                        }
                    }
                }
                return ;
            }
            catch (Exception err)
            {
                return;
            }
        }
沙发
发表于 2012-3-25 23:17:16 | 只看该作者
板凳
 楼主| 发表于 2012-3-26 00:55:44 | 只看该作者
Landroid 发表于 2012-3-25 23:17
这个帖子里给你解答了
http://bbs.extasp.net/forum.php?mod=viewthread&tid=197#lastpost

在QQ群里没有人给我了这样一段代码,我没看懂,不太会用!你能帮我看看吗?
        /// <summary>
        /// 左侧导航js脚本
        /// </summary>
        /// <param name="treeid"></param>
        /// <returns></returns>
        private string GetScriptById(string treeid)
        {
            StringBuilder str = new StringBuilder();
            str.AppendLine("var " + treeid + " = Ext.getCmp(\"" + treeid + "\");");
            str.AppendLine(treeid + ".on('click', function (node, event) {");
            str.AppendLine("if (node.isLeaf()) {");
            str.AppendLine("event.stopEvent();");
            str.AppendLine("var href = node.attributes.href;");
            str.AppendLine("window.location.href = '#' + href;");
            str.AppendLine("addExampleTab(node);");
            str.AppendLine("}");
            str.AppendLine("});");
            return str.ToString();
        }
我把它加载到”node.OnClientClick = GetScriptById(tree.ID);“里面,可是点击菜单报错,提示无法获取属性“on”的值: 对象为 null 或未定义。
如果我把它加载到”node.OnClientClick = GetScriptById(tree.ClientID);“里面,可是点击菜单报错,提示错误: “addExampleTab”未定义
这块到底要怎么写呀!
地板
发表于 2012-3-26 11:29:09 | 只看该作者
猪八戒 发表于 2012-3-26 00:55
在QQ群里没有人给我了这样一段代码,我没看懂,不太会用!你能帮我看看吗?
        ///
        /// 左 ...

addExampleTab是样例里default.js里的方法,你可以修改default.js代码,参考:
default.aspx页里添加
  1.     <script type="text/javascript">
  2.         var IDS = {
  3.             mainTabStrip: '<%= mainTabStrip.ClientID %>'
  4.         };

  5.     </script>
  6.     <script src="./js/default.js" type="text/javascript"></script>
复制代码
default.js里修改如下
  1. function onReady() {
  2. //    var btnExpandAll = Ext.getCmp(IDS.btnExpandAll);
  3. //    var btnCollapseAll = Ext.getCmp(IDS.btnCollapseAll);
  4.     var mainTabStrip = Ext.getCmp(IDS.mainTabStrip);

  5.     // 点击全部展开按钮
  6. //    btnExpandAll.on('click', function () {
  7. //        treeMenu.expandAll();
  8. //    });

  9. //    // 点击全部折叠按钮
  10. //    btnCollapseAll.on('click', function () {
  11. //        treeMenu.collapseAll();
  12. //    });


  13. //    // 点击树节点
  14. //    treeMenu.on('click', function (node, event) {
  15. //        if (node.isLeaf()) {
  16. //            // 阻止事件传播
  17. //            event.stopEvent();

  18. //            var href = node.attributes.href;

  19. //            // 修改地址栏
  20. //            window.location.href = '#' + href;

  21. //            // 新增Tab节点
  22. //            addExampleTab(node);
  23. //        }
  24. //    });

  25.     // 动态添加一个标签页
  26.     function addExampleTab(node) {
  27.         var href = node.attributes.href;

  28.         // 动态创建按钮
  29. //        var sourcecodeButton = new Ext.Button({
  30. //            text: "源代码",
  31. //            type: "button",
  32. //            cls: "x-btn-text-icon",
  33. //            icon: "./res.axd?icon=PageWhiteCode",
  34. //            listeners: {
  35. //                click: function (button, e) {
  36. //                    windowSourceCode.box_show('./source.aspx?files=' + href, '源代码');
  37. //                    e.stopEvent();
  38. //                }
  39. //            }
  40. //        });

  41.         var openNewWindowButton = new Ext.Button({
  42.             text: '新标签页中打开',
  43.             type: "button",
  44.             cls: "x-btn-text-icon",
  45.             icon: "./res.axd?icon=TabGo",
  46.             listeners: {
  47.                 click: function (button, e) {
  48.                     window.open(href, "_blank");
  49.                     e.stopEvent();
  50.                 }
  51.             }
  52.         });

  53.         var refreshButton = new Ext.Button({
  54.             text: '刷新',
  55.             type: "button",
  56.             cls: "x-btn-text-icon",
  57.             icon: "./res.axd?icon=Reload",
  58.             listeners: {
  59.                 click: function (button, e) {
  60.                     // 注意:button.ownerCt 是工具栏,button.ownerCt.ownerCt 就是当前激活的标签页。
  61.                     Ext.DomQuery.selectNode('iframe', button.ownerCt.ownerCt.getEl().dom).contentWindow.location.replace(href);
  62.                     e.stopEvent();
  63.                 }
  64.             }
  65.         });

  66.         // 动态添加一个带工具栏的标签页
  67.         var tabId = 'dynamic_added_tab' + node.id.replace('__', '-');
  68.         var currentTab = mainTabStrip.getTab(tabId);
  69.         if (!currentTab) {
  70.             mainTabStrip.addTab({
  71.                 'id': tabId,
  72.                 'url': href,
  73.                 'title': node.text,
  74.                 'closable': true,
  75.                 'bodyStyle': 'padding:0px;',
  76.                 'iconCls': 'icon_' + href.replace(/[^.]+\./, ''),
  77.                 'tbar': new Ext.Toolbar({
  78.                     items: ['->', refreshButton, '-', openNewWindowButton]
  79.                 })
  80.             });
  81.         } else {
  82.             mainTabStrip.setActiveTab(currentTab);
  83.         }
  84.     }

  85.     mainTabStrip.on('tabchange', function (tabStrip, tab) {
  86.         if (tab.url) {
  87.             window.location.href = '#' + tab.url;
  88.         } else {
  89.             window.location.href = '#';
  90.         }
  91.     });

  92.     var HASH = window.location.hash.substr(1);
  93.     var FOUND = false;

  94. //    (function (node) {
  95. //        var i, currentNode, nodes, path;
  96. //        if (!FOUND && node.hasChildNodes()) {
  97. //            nodes = node.childNodes;
  98. //            for (i = 0; i < nodes.length; i++) {
  99. //                currentNode = nodes[i];
  100. //                if (currentNode.isLeaf()) {
  101. //                    if (currentNode.attributes.href === HASH) {
  102. //                        path = currentNode.getPath();
  103. //                        treeMenu.expandPath(path); //node.expand();
  104. //                        treeMenu.selectPath(path); // currentNode.select();
  105. //                        addExampleTab(currentNode);
  106. //                        FOUND = true;
  107. //                        return;
  108. //                    }
  109. //                } else {
  110. //                    arguments.callee(currentNode);
  111. //                }
  112. //            }
  113. //        }
  114. //    })(treeMenu.getRootNode());


  115. }
复制代码
然后你再试试。
5#
 楼主| 发表于 2012-3-26 12:16:52 | 只看该作者
Landroid 发表于 2012-3-26 11:29
addExampleTab是样例里default.js里的方法,你可以修改default.js代码,参考:
default.aspx页里添加defa ...

我修改了JS已经搞定了!谢谢!不过你的那个方法也可以,但是你的方法不能刷新页面,一刷新所有的TAB就都没有了!
6#
发表于 2012-3-26 14:47:17 | 只看该作者
猪八戒 发表于 2012-3-26 12:16
我修改了JS已经搞定了!谢谢!不过你的那个方法也可以,但是你的方法不能刷新页面,一刷新所有的TAB就都 ...

嗯,是的,可以通过js实现
7#
发表于 2012-9-5 08:06:54 | 只看该作者
猪八戒 发表于 2012-3-26 12:16
我修改了JS已经搞定了!谢谢!不过你的那个方法也可以,但是你的方法不能刷新页面,一刷新所有的TAB就都 ...

可以告诉我下是怎么修改的吗?我现在也碰到了这个问题,一刷新打开的tab就关掉了
8#
发表于 2013-10-1 13:51:00 | 只看该作者
猪八戒 发表于 2012-3-26 12:16
我修改了JS已经搞定了!谢谢!不过你的那个方法也可以,但是你的方法不能刷新页面,一刷新所有的TAB就都 ...

怎么弄好的?能分享一下嘛?我也遇到了这个问题
9#
发表于 2013-10-1 14:18:09 | 只看该作者
Landroid 发表于 2012-3-26 11:29
addExampleTab是样例里default.js里的方法,你可以修改default.js代码,参考:
default.aspx页里添加defa ...

怎么我按照你写的还是addExampleTab is not defined 这个错
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-25 04:27 , Processed in 0.050375 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表