2010-11-29 74 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

相關問題