2012-10-11 33 views
0

我使用ExtJS的4如何獲得ExtJS的4面板自我更新的數據刷新

我有一個面板,看起來是這樣的:

var panel = Ext.create('Ext.panel.Panel',{ 
    title: 'Current Transaction Data', 
    width: 500, 
    items:[ 
      { 
       id: 'field1', 
       xtype: 'textfield', 
       label:'Field 1', 
      }, 
      { 
       id: 'field 2', 
       xtype: 'textfield', 
       label:'Field 1', 
      } 
    ], 

}) 

我有一個函數發出Ajax請求,看起來是這樣的:

var myDataObject; 
var getData= function(callback){ 
    Ext.Ajax.request({ 
     url: 'MY-URL-TO-GET-DATA', 
     success: function(response){ 
      myDataObject= Ext.JSON.decode(response.responseText)}})} 

我想要做的是,經過我找回我的數據對象,我想告訴面板使用新數據進行更新。我正在尋找一個像panel.update(data)這樣的調用。

我看到面板上的update()方法,但不知道如何使用它。我重寫它嗎?它說了一些關於使用模板的內容,但是我還沒有找到任何好的例子。我甚至不確定這是否是這樣做的首選方法。

我已經做了使用網格面板,並使用數據存儲類型相似的東西。在這種情況下,我可以在數據存儲上調用refresh(),但我不想爲這個特定的問題使用網格。

+0

您是否嘗試使用面板的doLayout()方法? – Inm0r74L

+0

doLayout()會重新繪製面板,但不會用新數據更新 – Kyle

回答

1

您可以使用panel.update(data),但如果需要,可以使用配置的tpl有效地將文本注入爲innerHTML。面板中的兩個文本字段是什麼?您可以將其中一個字段的文本設置爲數據,或者將Ext.form.field.DisplayView添加到面板,並將其值設置爲數據。

編輯:由於在下面的意見建議,得到的回答是繼承,並加入到做數據刷新的方法。

+0

我只希望面板能夠使用數據自行更新。在這個例子中,我只顯示了兩個字段,但在我的應用程序中,我可能還有更多。我不想在getData函數中調用Ext.getCmp('myfield')。value = myObject.myfield,因爲這會破壞封裝OO主體。 – Kyle

+0

您希望在面板中顯示數據?你可以繼承Panel的子類並添加一個接受數據顯示的方法,然後在該方法中執行'this.getComponent('myfield')。setValue(data)',這樣你就可以有效地將API添加到面板中在不破壞封裝的情況下更新數據。 – chinabuffet

+0

這很可能是我想要做的。由於我是EXTJS的新手,我不知道這是否是這樣做的首選方式,或者是否有更好的方法。謝謝! – Kyle