2009-05-26 92 views
0

extjsAction按鈕的處理程序使用以下代碼調用函數。extjsGirdPanel.getView()。getRowClass第二次不起作用

Add: function() { 
     var window = Ext.getCmp('wndAdd'); 
     window.items.items[0].getStore().reload; 
     var Grid1 = Ext.getCmp('grdAll'); 

     var grdStore2 = Ext.getCmp('grid2').getStore(); 
     var i = 0; 
     var IDList = new Array(); 
     for (i = 0; i < grdStore2.data.length; i++) { 

       IDList[i] = 
       grdStore2.data.items[i].data['ID']; 

     } 

     Grid1.getView().getRowClass = function(record, index) { 

      if (IDList.contains(record.data["ID"])) { 
       return 'disabled-row'; 
      } 
     }; 

     window.show(); 

    } 

但getRowClass功能僅適用於第一個按鈕的點擊。不會禁用添加的行。

+0

你什麼時候解僱getRowClass?看起來你正在創建函數,但從來沒有實際調用過響應。 – Ballsacian1 2009-05-26 20:00:41

回答

1

是的,在配置網格時,getRowClass只會被調用一次。但我希望每當windowwind.show()被解僱時就會觸發一些東西。我在window.onshow事件中使用了下面的代碼。

for (var i = 0; i < Grid1.getStore().data.length; i++) { 
    var element = Ext.get(Grid1.getView().getRow(i)); 
    var record = Grid1.getStore().getAt(i); 
    if (IdList.contains(record.data.ID)) { 
     element.addClass('disabled-row') 
    } else { 
     element.removeClass('disabled-row') 
    } 
} 
0

一旦提供了更多信息,我將用適當的答案編輯我的答案。

你什麼時候發射getRowClass?看起來你正在創建函數,但從來沒有實際調用過響應。

函數是否出錯,被調用,或者只是沒有做你想做的?

2

getRowClass只需要分配一次。它不是你調用的函數,每次渲染行時,它都是網格內部調用的函數。它不應該在事件處理函數中進行分配,而應該在應用程序級別的某處分配一次(例如,Grid1本身首先配置的任何地方都是最合理的地方)。這可能是也可能不是你的問題,這取決於你的Add函數如何被調用,這是不清楚的。請記住,由於您在getRowClass中依賴於IDList,因此您還必須引用該函數所在範圍內的該變量,並且您可能還必須添加檢查以確保其在訪問之前有效它。

您也沒有顯示Grid1重新呈現的位置。如上所述,getRowClass僅在呈現行時執行,因此除非在代碼中未顯示的地方刷新Grid1,否則getRowClass將永遠不會被調用。

+0

這是真的。 getRowClass僅在(重新)渲染時執行。我認爲商店重新加載(在函數開始時調用)應該執行網格刷新,但只在數據發生變化(內部增加不計)的情況下。 目前還不清楚`window.items.items [0] .getStore()`和`Ext.getCmp('grid2')。getStore()`是否返回相同的商店。 – Thevs 2009-05-27 15:56:58

+0

是的,在配置網格時,getRowClass只會被調用一次。而且我需要每次window.show事件觸發時都會觸發的東西。所以我在下面的代碼中使用了onWindowShow (var i = 0; i user99322 2009-06-12 18:34:29

1

僅供參考,儘管我很高興您找到了適合您的解決方案,但我不確定您是否還了解getRowClass。它不會被調用一次 - 每當網格行被重新渲染時(每次數據發生變化)都會被調用。它只會在你的代碼中被調用一次,因爲你的代碼設置不正確。

我並不完全瞭解您的使用案例,但無論顯示的窗口如何,如果網格的底層數據實際發生更改,則只需更改條帶即可。當您正確設置getRowClass函數時,網格會自動調用它,並在需要時自動調用它,並且它應該「正常工作」。應該不需要寫入你的迭代代碼,這隻會增加額外的開銷。

再次,僅供參考。 :)

相關問題