【原】提高篇:第八篇,制作树形菜单之二

本节作为制作菜单的第二个主要部分,当然这个功能又比第七篇复杂许多,这里不仅仅要实现左边的树形菜单,而且还要实现顶部的菜单栏,顶部的菜单栏显示的是树的所有的根节点.默认打开页面会显示左面所有的菜单,但是当点击顶部某个根节点时,首先会将左边的菜单全部清除,然后会顶部的菜单所有对应的节点加载到左面的树形菜单里面,当每次点击顶部菜单时,都会对检查左面的菜单是否与之对应,如果不对应,就将其清除,然后加载新的菜单.本例更具有实用性.

本篇除了有第七篇所包含的ext组件外,还增加了几个Ext组件,如:TabPanel,Toolbar,Button,Toolbar.Button,下面就对这几个Ext组件做一个简单的回顾:

1,TabPanel 作为一个选项板窗口,实际上是由许多个tab组成,不过没有tab类,因为每个tab就是一个简单的panel.可以有很多中方式构造出TabPanel ,它有两个很重要的属性,一个是activate,一个是deactivate,不用多说,他的意义大家一目了然.

2,Toolbar 一看就知道工具栏的作用了,在panel可以有工具栏,工具栏可以存放按钮,文本,分隔符等许多内容,并且它还可以直接通过面板的tools配置项往面板头部添加预先定义的工具栏选项.这个我会在基础篇中详细讲解

3,Button按钮和Toolbar.Button按纽就不用多解释了,但有一点要提到,那就是可以在Button上轻易定义任何图标.

同样在复制代码之前,先看看这个效果如何,放心,我不会夸大其词,它确实很精美,在这里也会依次显示页面的效果,比如在首次加载和点击[首页]的效果是一样的,另外2幅图则是用来显示当点顶部菜单后所展现的迷人的效果.图片较大. 

  

1,下面将完整客户端代码完整复制,显示如下: 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="Example_TreeAutoLoad_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
    <link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/ext-all.css" />
    <link rel="Stylesheet" type="text/css" />
    <link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/xtheme-purple.css" />
    <script type="text/javascript" src="ExtJS/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="ExtJS/ext-all.js"></script>
    <script type="text/javascript" src="ExtJS/ext-lang-zh_CN.js"></script>
    <style type="text/css">
    .panel_icon { background-image:url(images/first.gif)}
    .center_icon { background-image:url(images/center.png)}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <script type="text/javascript">   
    function BuildTree1()
    {
        //上面
        var toolbar = new Ext.Toolbar
        ({
             border:false,x:0,y:0,id:"toolbars",
             items:
             [
                {
                    xtype:"tbbutton",text:"首页",id:"btnEnter",icon: 'images/first.gif',cls: 'x-btn-text-icon',
                    listeners:{"click": function(){loadPanelWest("reload");}}
                }
             ]
        });       
        var panel_toolbar = new Ext.Panel
        ({
              border:false,x:0,y:0,
              items:[toolbar]
        });      
        var panel_north = new Ext.Panel
        ({
            id:"panel_north",region:"north",height:26,frame:false,border: false,//title:"菜单",
            items:[panel_toolbar]
        });
       
        //中间
        var tabpanel = new Ext.TabPanel
        ({
            activeTab:0,autoWidth:true,border:false,frame:false,
            items:
            [
                {
                    xtype:"panel",layout:'fit',title:"google",closable:true,border:false,frame:false,iconCls:'panel_icon',
                    html:"<iframe scrolling='no' width='100%' height='100%'  frameborder='0' src=''></iframe>"
                } 
            ]
        });
        var panel_center = new Ext.Panel
        ({
            id:'panleCenter',frame:false,border:false,
            region:'center',
            split:true,
            items:[tabpanel],
            layout:'fit' 
        });
        //左面
        var panel_west = new Ext.Panel
        ({
            id:'panWestMenu',
            region:'west',
            //title:'',
            split:true,
            width: 200,
            collapsible: true,
            margins:'0 0 0 0',
            layout:'accordion',
            layoutConfig:{animate:true}
        });
        var viewport = new Ext.Viewport
        ({
            id:'vpMain',
            layout:'border',
            items:
            [
                panel_north,
                panel_center,
                panel_west
            ]
        });
        //加载左面的数据
        var loadPanelWest = function(init)
        {
             Ext.Ajax.request
             ({
                    url: 'json.aspx?Param=0',
                    success: function(response, options)
                    {
                        try
                        {
                            var panWestMenu = Ext.getCmp("panWestMenu");
                            if(panWestMenu)
                            {
                                var children = panWestMenu.findByType('panel');
                                if(children)
                                {
                                    for(var i=0, len = children.length; i<len; i++)
                                    {
                                        panWestMenu.remove(children[i],true);
                                    }
                                }
                            }
                            //debugger;
                            var toolBars = Ext.getCmp("toolbars");
                            var menusArray = Ext.util.JSON.decode(response.responseText);
                           
                            for(var i=0; i<menusArray.length; i++)
                            {
                                var mp = CreateMenuPanel(menusArray[i].TypeTitle,menusArray[i].TypeID);
                                panWestMenu.add(mp);
                                if(init=="load")
                                {
                                    var tempBtn = CreteButton(menusArray[i].TypeTitle,menusArray[i].TypeID);
                                    toolBars.addItem(tempBtn);
                                }
                            }                           
                            panWestMenu.doLayout();
                           
                        }
                        catch(e)
                        {
                           
                        }
                    }
                });
            };
            loadPanelWest("load");
            //创建单个treePanel
            var CreateMenuPanel = function(title,TypeID)
            {
                  return new Ext.Panel
                  ({
                      title:title,layout:'fit',border: false,frame:true,                    
                      items:
                      [{
                          xtype:'treepanel',singleExpand:true,animate:true,autoScroll:true,containerScroll: true,
                          border: false,
                          width:200,height:370,enableDD:false,dropConfig: {appendOnly:true},                         
                          loader: new Ext.tree.TreeLoader({dataUrl:"json.aspx?Param=1"}),                         
                          root:new Ext.tree.AsyncTreeNode
                          ({
                              id:TypeID,
                              text: title,
                              draggable:false,
                              expanded:true
                             
                          })
                          ,listeners:{"click": function(node,e){Ext.Msg.alert(node.text,"你点的是:"+node.text);}}
                      }]
                 });
            };
            //创建单个按钮
            var CreteButton = function(MenuTitle,MenuID)
            {
                return new Ext.Toolbar.Button
                ({
                      id:"MenuID"+MenuID,text:MenuTitle,icon: 'images/plugin.gif',cls: 'x-btn-text-icon',
                      tooltip:MenuID,
                      listeners:
                      {
                            "click":function(o,e)
                            {
                               
                                var panWestMenu = Ext.getCmp('panWestMenu');
                               
                                var toolbars = Ext.getCmp('toolbars');
                                var panel_north = Ext.getCmp('panel_north');
                                if(toolbars&&toolbars.items.length>0)
                                {
                                    for(var i=0;i<toolbars.items.length;i++)
                                    {
                                        if(toolbars.items.items[i].id==o.id)
                                        {
                                            toolbars.items.items[i].pressed = true;
                                        }
                                        else
                                        {
                                            toolbars.items.items[i].pressed = false;
                                        }
                                    }                                   
                                }
                                if(panWestMenu)
                                {
                                    var children = panWestMenu.findByType('panel');
                                    if(children)
                                    {
                                        for(var i=0, len = children.length; i<len; i++)
                                        {
                                            panWestMenu.remove(children[i],true);
                                        }
                                    }                                   
                                    var mp = CreateMenuPanel(o.text,o.tooltip);
                                    panWestMenu.add(mp);   
                                    panWestMenu.doLayout();
                                }
                            }
                      }
                });
            };
   
    }
    </script>
   
    <script type="text/javascript">
    function ready()
    {
        BuildTree1();       
    }
    Ext.onReady(ready);
    </script>
    </div>
    </form>
</body>
</html>

2,因为这篇和第七篇除了客户端不一样之外,其他的地方都一样,这里后台的具体代码就不再列出,有兴趣的朋友可以将第七篇的后台代码直接用在这篇就知道结果了.

posted @ 2008-10-27 16:55 殷良胜 阅读(1488) 评论(17)  编辑 收藏 网摘

  回复  引用  查看    
#1楼[楼主]2008-10-30 13:03 | 殷良胜      
  回复  引用    
#2楼2008-11-21 08:55 | dings[未注册用户]
右边TAB页里的google页面怎么显示出来的啊?
  回复  引用  查看    
#3楼[楼主]2008-11-21 18:36 | 殷良胜      
@dings
呵呵
你好
在这个地方
html:"<iframe scrolling='no' width='100%' height='100%' frameborder='0' src=''></iframe>"
把上面的语句修改为:
html:"<iframe scrolling='no' width='100%' height='100%' frameborder='0' src='http://www.google.com" target="_new">http://www.google.com'></iframe>"
因为我当时网有时候会断,所以在调试的时候将它去掉了。


  回复  引用    
#4楼2008-12-21 12:16 | yuenn[未注册用户]
楼主太伟大了
  回复  引用    
#5楼2008-12-21 12:18 | yuenn[未注册用户]
这个例子能够提供源代码就好了
我花了2天的时间程序才完全跑通

  回复  引用  查看    
#6楼[楼主]2008-12-22 11:34 | 殷良胜      
@yuenn
自己动手岂不是更好

  回复  引用    
#7楼2009-03-03 14:36 | jerry_tang[未注册用户]
怎样通过左边的tree 改变右边frame的src值啊
  回复  引用    
#8楼2009-03-04 10:12 | jerry_tang[未注册用户]
treePanel
有url这个属性没有 当我点击某个节点时 弹出相应的页面

  回复  引用    
#9楼2009-05-20 13:52 | 刘liu[未注册用户]
要怎样设置才可以当点击树时一下子把子节点都展开
  回复  引用    
#10楼2009-05-20 13:57 | 刘liu[未注册用户]
可以去掉那树的标头吗
  回复  引用  查看    
#11楼[楼主]2009-05-20 13:59 | 殷良胜      
--引用--------------------------------------------------
刘liu: 要怎样设置才可以当点击树时一下子把子节点都展开
--------------------------------------------------------
根据这个属性:singleExpand设置

  回复  引用  查看    
#12楼[楼主]2009-05-20 13:59 | 殷良胜      
--引用--------------------------------------------------
刘liu: 可以去掉那树的标头吗
--------------------------------------------------------
树的标头是什么

  回复  引用  查看    
#13楼[楼主]2009-05-20 14:00 | 殷良胜      
--引用--------------------------------------------------
jerry_tang: treePanel
有url这个属性没有 当我点击某个节点时 弹出相应的页面
--------------------------------------------------------
你可以自己设置

  回复  引用    
#14楼2009-05-21 13:34 | 刘liu[未注册用户]
我要把树放到一个panl里 可我不要树上面的那个标头啊 就是title显示的那一行 怎么去掉啊
  回复  引用  查看    
#15楼[楼主]2009-05-21 14:20 | 殷良胜      
--引用--------------------------------------------------
刘liu: 我要把树放到一个panl里 可我不要树上面的那个标头啊 就是title显示的那一行 怎么去掉啊
--------------------------------------------------------
查看这段代码
//创建单个treePanel
var CreateMenuPanel = function(title,TypeID)
{
return new Ext.Panel
({
title:title,layout:'fit',border: false,frame:true,
items:

----------
将上面动态设置的 title:title改为title:"" 永远为空 你测试下吧 好吗

  回复  引用    
#16楼2009-05-26 10:42 | 刘liu[未注册用户]
可以了 谢谢胜哥
  回复  引用    
#17楼2009-07-03 10:38 | vincentalcent[未注册用户]
for(var i=0;i<toolbars.items.length;i++)
{
if(toolbars.items.items[i].id==o.id)
{
toolbars.items.items[i].pressed = true;
}
else
{
toolbars.items.items[i].pressed = false;
}
}



为什么要两个items啊,还有pressed起什么作用啊

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1320588




相关文章:

相关链接: