2010-08-05 76 views
0

是否有辦法動態修改colModel中狀態字段的值? 比方說,我們有像場一處山坳型號:jqGrid動態選擇字段

... field ... name: "state",type: "select", 
editoptions: {value: "0:state0;1:state1;2:state2;3:state3;4:state4"} 

所以我得到一個選擇欄爲我的這個值的狀態。但我需要動態地決定哪些選擇區域應該是可能的。 如果當前行的狀態是state0,則只應顯示state0和state1。 如果狀態爲狀態1,則顯示應該是狀態0,狀態1和狀態2 等等直到狀態4,其應該僅顯示狀態3和狀態4。

我能用格式化程序解決這個問題,還是有其他方法可以做這樣的事情。

爲了讓它更加困難,可以說在我的應用程序中,顯示的狀態通常取決於登錄的用戶。 用戶只能看到state0,state2和state4。 這可能會變得更加複雜,導致state3和state4之間的轉換不允許當前用戶使用。

不過,國家自己也是動態的。在我的應用程序中動態生成一個對象的javascript會有幫助,它表示一個通用的狀態類,並使用此對象在格式化程序中生成我需要的輸出? 所以我可以將邏輯封裝在這個對象中,我的輸出是如何生成的,而且我只能得到用戶能夠看到的狀態。

應該讓我用一塊石頭殺死兩隻鳥。

重讀後,我希望它清楚我想做什麼,如果不告訴我,我會解釋它的更多細節。

的具體問題的解決方案,THX奧列格:

editoptions : { 

    value : function(){ 
     //a function can be called here: 
     currentRow=$("#order_items").getGridParam('selrow'); 
     currentState=$("#order_items").getCell(currentRow,"state"); 
        nastyGeneratedThings=function(){ 
            ... do some nasty things with currentState 
            ... and generate what you want 
            } 
        return nastyGeneratedThings 
    } 

我遇到了一些麻煩,導致該函數只調用一次。所以我必須在Navgrid中設置recreateForm選項。

navGrid("#pager", { 
      edit : true, 
      add : true, 
      del : true 
     }, { 
      height : 500, 
      width : 500, 
      // recreate the form every time when edit button is clicked. 
      // Default is false. 
      recreateForm : true 
     } 
     }); 

之後,我的功能觸發每次我點擊編輯。 希望這可以幫助某人某種方式。

回答

1

來自editoptionsvalue屬性不僅可以是字符串,也可以是函數。該函數可以返回類似「0:state0; 1:state1; 2:state2; 3:state3; 4:state4」的字符串或{"0":"state0", "1":"state1", "2":"state2", "3":"state3", "4":"state4"}之類的對象。最後一種格式具有一些優點:例如可以使用':',';'在值的內部。

該函數沒有參數,但你可以用科爾獲得當前選定的行狀getGridParam('selrow')方法與getCell(rowid,iCol)getCell(rowid,"state")的「狀態」欄中的當前值。

更多value財產http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editoptions的說明)。可能這可以解決你的問題?

+0

Thx,幫助了我。我高估了這個問題,因爲我想在創建網格時我必須做所有的事情。但那不是事實。我只需要在editForm創建之前實現我的邏輯。我會做一些明顯的測試,事實上我認爲我不能以這種方式使用它。你確定我可以在函數本身中調用getCell()或類似的東西,因爲在調用時該行本身不存在。幾天前我在格式化程序中遇到類似的問題,我無法從網格中獲得任何價值。比我意識到的是,這一排實際上並不存在。 你知道我的意思嗎? – evildead 2010-08-06 01:24:36

+0

評論字段太短,該死的:) 所以,如果我重新思考這個問題,它不關心我給colModel。在進行編輯之前,我可以直接將具體狀態注入到表單中。還是有一種優雅的方式來修改editform中的字段?例如在editForm呈現之前覆蓋colModel。或者我必須通過刪除表單中的原始狀態並僅插入可能的狀態來手動執行此操作? – evildead 2010-08-06 01:35:14

+0

你可以用非常簡單的方式來定義加載是否完成(例如在'loadCompleted'內設置一個變量,並將其重置爲'beforeRequest'或'loadBeforeSend')。在表加載過程中,你的'value'函數可以返回完整的值列表。只有在編輯更多內容時,才能返回「值」函數中減少的值列表。不是嗎? – Oleg 2010-08-06 08:27:43