论坛首页 Web前端技术论坛

Panel迟加载的方法(基本解决)

浏览 3733 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-24  
最近在研究Ext,做了一个ajax调取后台数据再显示出来的demo.
在Panel中要用到store中的数据.
请问如何才能让panel在store.load后才表现出来.谢谢

下面是部分代码

show.jsp
Ext.onReady(function(){
if (newsid==''){
	Ext.Msg.alert('抱歉','您所输入的文章不存在或已被删除',function(){
		history.go(-1);
	}
					  );
};

var store = new Ext.data.JsonStore({
    url: 'ajax.jsp?rpc=getnews&id='+newsid,
    root: 'root',
    fields: ['n_ttitle','n_content',{name:'n_time', type:'date'}],
    autoLoad:true
});
    var p = new Ext.Panel({
        title:'标题',
       //title:store.getAt(0).get('n_ttitle'),如果store还未加载就会出错
        collapsible:true,        
        width:800,
        html:'文章在这里\u002F'
      //html:store.getAt(0).get('n_content'),文章内容
    });
   p.render('content');
});


后台传过来的数据
{ "root": [{'n_ttitle': '文章标题 ','n_content': '文章内容','n_time': '2008-3-10 14:47:42'}]
}


以下是解决方案:
gdyxml2000 写道
加上如下代码:
store.on('load', function(_store, _records, _options){
    var title = _records[0].get('n_ttitle');
    var content = _records[0].get('n_content');
    p.setTitle(title);
    p.html = content;
    p.doLayout();
});


   发表时间:2008-03-24  
在显示Panel前,加上这句 store.load();
0 请登录后投票
   发表时间:2008-03-24  

回楼上的.
这样也会报错

firebug报错为:

 

store.getAt(0) has no properties
(no name)()         
fire()                    ext-all-debug.js (line 1505)
fireDocReady()               ext-all-debug.js (line 1542)
title:store.getAt(0).get('n_ttitle'),
 

初步分析是因为初始化时,ajax请求的数据还没有加载过来,Panel 就开始加载了.

title:store.getAt(0).get('n_ttitle'),

这步时,store还没有加载完

 

 

0 请登录后投票
   发表时间:2008-03-24  
加上如下代码:
store.on('load', function(_store, _records, _options){
    var title = _records[0].get('n_ttitle');
    var content = _records[0].get('n_content');
    p.setTitle(title);
    p.html = content;
    p.doLayout();
});
0 请登录后投票
   发表时间:2008-03-24  
gdyxml2000 写道
加上如下代码:
store.on('load', function(_store, _records, _options){
    var title = _records[0].get('n_ttitle');
    var content = _records[0].get('n_content');
    p.setTitle(title);
    p.html = content;
    p.doLayout();
});



感谢gdyxml2000帮助解决了问题

还有就是:
p.html = content;
这个不能更新panel中的html内容.
0 请登录后投票
   发表时间:2008-03-25  


p.html = content;

换成

p.body.update(content);

0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics