发布于 2016-12-15 07:57:52 | 217 次阅读 | 评论: 0 | 来源: 网友投递		
				
		
					这里有新鲜出炉的精品教程,程序狗速度看过来!
					
		
			ExtJS Javascript库
ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架。		
		
	    在使用extjs gridpanel时,当将数据载入时,grid中的数据并没有显示出来。
找了快1个小时,就是不知道错误在哪里。。。郁闷 
我在鼠标左侧点击tree节点,在右侧创建一个标签页,这个已经能够实现,于是我再在新建的标签页里嵌套一个Grid。 
奇怪的问题出现了。。 
FF和IE下都没报错。但是Grid就是不显示。本来我以为我代码错误。于是我狂找我的代码问题,无意中关掉FF的firbug插件界面,grid就现实出来了。。。原来只要我的窗口发生任何变化Grid才会显示出来。 
请问这是我代码问题还是bug?如何解决? 
补充一下,我直接在TabPanel里面用items管理grid对象并没问题。但是我用添加事件后在其中管理就出问题了。 
文件都是封装在类包里面的。所以只贴关键部分 
这是监听事件。 
Java代码 
listeners:{ 
'click':function(node, event) { 
event.stopEvent(); 
//把根节点的选择判断去除 
if(node.text=="SamPeng" || node.text == "文章管理" || node.text == "产品管理" || node.text == "信息管理" || node.text == "来访管理"){ 
}else{ 
var n = main.getComponent(node.id); 
if (!n) { //判断是否已经打开该面板 
//如果是按的文章列表,新建一个列表对象并且丢进新的标签页 
if(node.text == "文章列表"){ 
var grid=new SamPeng.account.list(); 
n = main.add({ 
'id':node.id, 
'title':node.text, 
items: [{layout:"fit",items:grid}] 
});} 
} 
main.setActiveTab(n); 
} 
} 
listeners:{ 
                'click':function(node, event) { 
                         event.stopEvent(); 
                        //把根节点的选择判断去除 
                        if(node.text=="SamPeng" || node.text == "文章管理" || node.text == "产品管理" || node.text == "信息管理" || node.text == "来访管理"){ 
                        }else{ 
                            var n = main.getComponent(node.id); 
                            if (!n) { //判断是否已经打开该面板 
                                    //如果是按的文章列表,新建一个列表对象并且丢进新的标签页 
                                if(node.text == "文章列表"){ 
                                    var grid=new SamPeng.account.list(); 
                                    n = main.add({ 
                                    'id':node.id, 
                                    'title':node.text, 
                                     items: [{layout:"fit",items:grid}] 
                                });} 
                            } 
                         main.setActiveTab(n); 
                            } 
                        } 
然后是我的tab面板创建类 
Java代码 
* Copyright(c) 2008-2010, SamPeng Inc. 
*/ 
package("SamPeng.panel"); 
/** 
* 作用: 用来创建中间的主显示面板 
* 作者:SamPeng 
* 时间:2008年9月24日1:24:42 
*/ 
SamPeng.panel.main = function(config){ 
var config=config || {}; 
var deconfig={ 
renderTo:'mainlay', 
width:1000, 
height:561, 
activeTab:0, 
plain: true, 
border: true, 
tabPosition: 'top', 
frame: true, 
autoScroll: true, 
enableTabScroll:true,//超过宽度就自动两边多出滚动条 
items:[{ 
title:"首页" 
} 
] 
} 
Ext.applyIf(config,deconfig); 
SamPeng.panel.main.superclass.constructor.call(this,config); 
} 
Ext.extend(SamPeng.panel.main,Ext.TabPanel); 
* Copyright(c) 2008-2010, SamPeng Inc. 
*/ 
package("SamPeng.panel"); 
/** 
* 作用: 用来创建中间的主显示面板 
* 作者:SamPeng 
* 时间:2008年9月24日1:24:42 
*/ 
    SamPeng.panel.main = function(config){ 
        var config=config || {}; 
        var deconfig={ 
                    renderTo:'mainlay', 
                    width:1000, 
                    height:561, 
                    activeTab:0, 
                    plain: true, 
                    border: true, 
                    tabPosition: 'top', 
                    frame: true, 
                    autoScroll: true, 
                    enableTabScroll:true,//超过宽度就自动两边多出滚动条 
                 items:[{ 
                                title:"首页" 
                            } 
                         ]             
                    } 
        Ext.applyIf(config,deconfig); 
        SamPeng.panel.main.superclass.constructor.call(this,config); 
     } 
    Ext.extend(SamPeng.panel.main,Ext.TabPanel); 
Grid的就只贴数据源和属性的了。 
Java代码 
/******************************************************* 
* 为表格建立数据源 
* 链接后台,并且按每一页的数据列表返回 
* 用Json数据格式传递 
*******************************************************/ 
this.dataStore = new Ext.data.Store({ 
proxy: new Ext.data.HttpProxy({ 
url: 'php/article_list.php', 
disableCaching:false 
}), 
reader: new Ext.data.JsonReader({ 
root: 'results', 
totalProperty: 'total', 
id:'id' 
},[ 
{name: 'id'}, 
{name: 'name'}, 
{name: 'typename'}, 
{name: 'time'}, 
]) 
}); 
this.dataStore.load({params:{start:0, limit:this.myPageSize}}); 
。。。 
。。。省略很多 
。。。 
/******************************************************* 
* 构造编辑列表面板(GridPanel) 
*******************************************************/ 
SamPeng.account.list.superclass.constructor.call(this, { 
id: 'list-account-panel', 
ds: this.dataStore, 
cm: art_cm, 
sm: selectBoxModel, 
height:500, 
tbar: pagingbar, 
bbar: menubar, 
loadMask: {msg: '读取数据中 ...'}, 
enableColumnHide: false, 
autoScroll:true 
//region:'center' 
}); 
Ext.extend(SamPeng.account.list, Ext.grid.GridPanel, { 
reload : function() { 
this.dataStore.load({params:{start:0, limit:this.myPageSize}}); 
}, 
// 调用删除数据 
// 服务器通过接受参数返回删除的数据 
deleteData : function (jsonData) { 
this.dataStore.load({params:{start:0, limit:this.myPageSize, delData:jsonData}}); 
} 
        /******************************************************* 
        * 为表格建立数据源 
        *     链接后台,并且按每一页的数据列表返回 
        *    用Json数据格式传递 
        *******************************************************/ 
        this.dataStore = new Ext.data.Store({ 
            proxy: new Ext.data.HttpProxy({ 
             url: 'php/article_list.php', 
             disableCaching:false 
            }), 
            reader: new Ext.data.JsonReader({ 
                root: 'results', 
                totalProperty: 'total', 
                id:'id' 
            },[ 
             {name: 'id'}, 
             {name: 'name'}, 
             {name: 'typename'}, 
             {name: 'time'}, 
            ]) 
        }); 
        this.dataStore.load({params:{start:0, limit:this.myPageSize}});     
。。。 
。。。省略很多 
。。。 
        /******************************************************* 
        * 构造编辑列表面板(GridPanel) 
        *******************************************************/ 
        SamPeng.account.list.superclass.constructor.call(this, { 
                id: 'list-account-panel', 
                ds: this.dataStore, 
                cm: art_cm,     
                sm: selectBoxModel, 
                height:500, 
                tbar: pagingbar, 
                bbar: menubar, 
                loadMask: {msg: '读取数据中 ...'}, 
                enableColumnHide: false, 
                autoScroll:true 
                //region:'center' 
        }); 
Ext.extend(SamPeng.account.list, Ext.grid.GridPanel, { 
reload : function() { 
        this.dataStore.load({params:{start:0, limit:this.myPageSize}});     
    }, 
// 调用删除数据 
// 服务器通过接受参数返回删除的数据 
deleteData : function (jsonData) { 
    this.dataStore.load({params:{start:0, limit:this.myPageSize, delData:jsonData}}); 
}     
谢谢各位大侠了! 
问题状况是我浏览器不动,Grid死活不显示,浏览器一变,Grid就出来了。而且是按照我设定的参数大小显示的。不明白倒底问题出在哪里。只有这么多分了。望指教 
本来以为是代码有问题,看Firebug没有报错,并且观察Firebug确实从服务端取得了数据。搞了很久没有想出问题,但是什么也不干,把窗口最小化再最大化的时候,数据又出来了!!!
这可能是Extjs的一个Bug,从网上找类似的解决方法,找到了这个:
,后来又和qiuye402大侠进行了沟通终于搞定。 
其实就是布局刷新的问题,只需将最外层的容器重新render一下就可以了。最外层的容器一般就是类似于viewport的东东了,刚开始不知道,一直重新render包含grid的panel,没有效果,重新render viewport一切OK了!