网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 网页素材 > AJAX代码 > 正文
ExtJS 2.2主内容区域
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 11/01/18
返回深入学习ExtJS 2.2开发系列连载教程目录
在这一节中,我们实现第四步的mainPanel类。主内容区域是根据用户点击了左菜单的节点而载入其相对应内容。为了使点击新一个节点而不覆盖上一个节点的内容,我们可以采用TabPanel的方式,当前点击载入的面板是处在激活状态,而其它的面板都不处在激状态,但是又有标题提示着它的存在,点击这里标题,把那些不处在激活状态的确析激活起来。这个和重新点击leftMenu载入的是不一样,因为载入的页面是初始化状态,而这个历史面板可能你已经进行了一部分操作,比如添写一部分表单数据。

对于这种方式,我们可以采用TabPanel类来实现。但是它又不能和根据节点的属性来载入对应的页面,又要使用TabPanel的功能,又要扩展它。最好的方式是采用继承它。不过这里我们换一种继承的实现方式,让Ext.extend()自动生成它的构建方法MainingPanel:Morik.Office.MainingPanel=Ext.extend(Ext.TabPanel, {
initComponent:function(){
Morik.Office.MainingPanel.superclass.initComponent.call(this);
//一些初始化工作                      ①
    }

    //其它方法                             ②
};
这种方式的继承,它会自动实现MainingPanel的构建函数,并把所有的配置项都传入到父类中去。如果要实现该类的一些私有初始化处理时,可以通过组件的模板方法initComponent来完成。在这里暂时还没有私有初始化的任务。

继承完成之后,我们要实现该类的主要功能,就是loadTab方法,如何根据节点的属性来载入对应的内容呢。这个内容我们可以把它们实现为各种不同的类。通过构建这个类的实例就完成载入该内容。这样的内容和不同的面板类对应起来。

我们现在要处理是如何根据节点的属性来构建不同表现内容类的实例。首先节点要有一个唯一的标识,这个标识一般都采用其id,这个标识的命名规则和类名有一个对应关系,比如Id为department,那么我就可以构建其类名为Morik.Office.DepartmentPanel类的实例。但是有的时候并不一定会有这种对应关系,那么我们是否通过代码手动来建立它们的关系呢,如我们先在在MainingPanel类中注册节点id和显示内容类的对应关系,之后就在这个册的集合中根据传入的id找到对应的类。

为了和默认是命名规则结合起来,我们可以先在在注册的集合中根据id来找其类名,如果没有找到就按默认的命名规则的类名来构建。这样说来,我们首先得实现一个注册这种Id和类名对应关系的方法,MainingPanel代码:addPanel : function(name, panel) {
       if (!this._cache) this._cache = {};
       this._cache[name] = panel;
    }
 在代码2.3中②处加上这个方法,当然在这个方法之前得加,作为分隔,这是json对象的标准。在这个方法中,我们可以传入两个参数,name是节点的id标识,panel是该标识对应的内容的类。每调用该函数,就往当前实例的_cache的中注册name/panel的Hash对,在这里会进行判断而自动构建this._cache,不过我们最好是在initComponent方法中加上this._cache = {}来初始化这个集合。接下来我们就应该实现根据指定id来找到这个注册的类或按默认命名规则来实现的类,MainingPanel代码:findPanel : function(name) {
       var ret = this._cache[name];
       if (!ret) {
           var pn = (this.ns ? this.ns : ''Morik.Office'') + "."
                  + Ext.util.Format.capitalize(name) + ''Panel'';
           var ret = eval(pn);      
       }

       return ret;
    },
它加在addPanel方法之后就可以了。它的实现是首先从cache中找到是否有该名字对应的类,没有话就按默认默认命名规则来生成类名。我们也可以通过ns配置项来改成类名中命名空间。原来id的基础首字母大写然后加上Panel后缀就构建其名字,在这里名字前加上命名空间,就构建了类名字符形式。之后通过eval它看看上下文中是否有该类,没有的话就是undefined。

实现了findPanel,我们就可以实现最重要的方法loadTab。MainingPanel代码:loadTab : function(node) {
    var n = this.getComponent(node.id);
var c = {''id'' : node.id, ''title'' : node.text, closable : true};
if (n) {this.setActiveTab(n);}
else {        
     var pn = this.findPanel(node.id);
     n=this.add(pn ?new pn(c):Ext.apply(c,{html:''该页面尚未实现''}));
n.show().doLayout();
}
              ①      
    },
loadTab首先是判断是否已经构建该id指定类的实例,如果构建了就把它设为激活状态。在实现使用中,这里还应该加上一些初始化的工作的代码。如果没有找到,那么就根据节点的id来找到其类名,找到了该类就构建它并把它加入到TabPanel的items中去。如果没有找到就生成一个提示你还没有实现的页面。最后进行显示并布局。

现在我activeTab们就可以调用该类了,为了实现如图2.5的效果,我们得在main.js中第四步中取代原有的mainTab代码(MainingPanel代码):var mainTab = new Morik.Office.MainingPanel( {          
           region : ''center'',
           activeTab : 0,            
           items : [{
              title : ''我的首页'',
              html : ''<div style="background:url(pic/main.gif) no-repeat center middle; height:508px;"></div>''
           }
]
       });
这里的activeTab0为是在主页面第一次载入的时候显示其主页面的图片。即Items中的子组件。但是这个leftMenu类还不是很完善,在后面的章节,我们会改进来能动态传入数据。
第一节:深入剖析ExtJS 2.2主页面布局
第二节:深入剖析ExtJS 2.2左边导航菜单
  • 上一篇资讯: ExtJS 2.2左边导航菜单
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号