2010-11-29 65 views
1

对于ExtJS,我很新,所以这可能是个愚蠢的问题。我有一个自定义面板,扩展Ext的面板类,它做了一个AJAX调用,并应该创建并填充内部GridPanel与数据获取(列是动态的,所以我不能准备网格)。 webService的第一个参数是当AJAX调用封装在webService对象成功时用数据调用的回调函数。GridPanel数据在初始化后加载后不能显示

到现在为止,我想填充我TablePortlet用硬编码的数据,而且运作良好时renderCallback方法是从constructor直接调用,但在所有如果AJAX请求后调用不起作用。我可以在Firebug中跟踪,在这种情况下该方法仍然被调用,context有效,store填充了数据,但没有任何呈现。

我应该如何正确填充数据?是否有任何我缺少的render方法?

TablePortlet = Ext.extend(Ext.Panel, { 

    constructor: function(portletTitle, sourceId, webService) 
    { 
     var context = this; 

     TablePortlet.superclass.constructor.call(this, { 
      title: portletTitle, 
      anchor: '100%', 
      frame: true, 
      collapsible: true, 
      draggable: true 
     }); 

     var grid = null; 

     function renderCallback(data) 
     { 
      if (grid != null) 
       context.remove(grid); 

      var store = new Ext.data.ArrayStore({ 
       autoDestroy: true, 
       fields:[{name:"a"}, {name:"b"}, {name:"c"}, {name:'d'}], 
      }); 
      store.loadData([['1','2','1','2'],['3','4','3','4']]); 

      grid = new Ext.grid.GridPanel({ 
       store: store, 
       colModel: new Ext.grid.ColumnModel([ 
        {header: 'A', dataIndex:'a'}, 
        {header: 'B', dataIndex:'b'}, 
        {header: 'C', dataIndex: 'c'}, 
        {header: 'D', dataIndex: 'd'}, 
       ]), 
       width: '100%', 
       autoHeight: true, 
       view: new Ext.grid.GridView(), 
       viewConfig: { 
        forceFit: true 
       }, 
       layout: 'fit' 
      }); 

      context.add(grid); 
     } 

     this.on('render', function() 
     { 
      webService.GetTable(renderCallback, sourceId); 
     }); 
    } 
}); 

回答

1

解决的办法是:

context.doLayout(); 

由于这种并行的问题:How to refresh a panel after data is loaded?

+0

NOtherDev嗨,你的答案是正确的,它在Firefox,Chrome或任何其他的作品,但它不”在IE中工作。你能告诉我如何在IE中解决它。 – 2015-07-22 06:31:46

相关问题