2017-07-16 86 views
0

我有一個jqgrid,我用custom_element來格式化顯示。jqgrid編輯組合列和綁定數據

{ 
      name: 'PDTime', index: 'PDTime', width: 60, editable: true, formatter: timeSpanHMFormatter, edittype: 'text', editoptions: { 
       custom_element: function (value, options) { 
        var elemStr = '<div> <select id="UTTime" name="UTTime" >' 

        for (var i = 0; i < 24; i++) { 
         elemStr = elemStr + '<option value="' + i + '">' + i + '</option>' 
        } 
        elemStr = elemStr + "</select> </div>"; 
        return $(elemStr)[0]; 
       }, 
       custom_value: function (elem, operation, value) { 
        console.log(elem); 

       } 
      } 
     }, 

格式化器是表示小時和分鐘的時間跨度顯示。值「PDTime」是一個具有小時和分鐘屬性的對象。

function timeSpanHMFormatter(cellvalue, options, rowObject) {   
    if (cellvalue.Hours == 0 && cellvalue.Minutes == 0) 
     return ""; 
    var value = "00:00"; 

    if (cellvalue.Hours.toString().length == 1) 
     value = "0" + cellvalue.Hours 
    else 
     value = cellvalue.Hours 

    if (cellvalue.Minutes.toString().length == 1) 
     value = value + ":0" + cellvalue.Minutes 
    else 
     value = value + ":" + cellvalue.Minutes 

    return value; 
} 

在視圖模式下,單元看起來像02:30等,具體取決於值。我想在編輯模式下將值綁定到此PDTime對象,我不知道如何去做。

custom_element現在創建一個小時下拉菜單,我試圖將下拉選定的值綁定到PDTime.Hours。我怎樣才能做到這一點 ?

+0

哎呀,edittype:「自定義」中沒有'text'題。 – user3462433

+0

您能更詳細地說明您的意思:「在編輯模式下將值綁定到此PDTime對象」。使用了什麼編輯模塊 - 內聯,格式化的單元格? –

+0

我正在使用內聯編輯。我的意思是,當我輸入PDTime的值時,我希望能夠將它分配給PDTime.hours和分鐘。例如,如果在兩個下拉列表中選擇兩個值,一個綁定到PDTimr.hours,另一個分鐘,所以當我回復保存時,我可以訪問PDTimr對象。 – user3462433

回答

0

從自定義元素的Guriddo Documentation here可以看出,需要定義一個custom_value函數並將操作設置爲get。

這裏的訣竅是,這個事件應該在操作得到時返回對象。 下面是一個exsmple:

custom_value: function (elem, oper) { 
    if(oper==='get') { 
     var hour = $("#UTTime", elem).val(); 
     // get the minutes according to your definition 
     var time = $("#UTTime", elem).val(); 
     return {"Hours" : hour, "Minutes": time}; 
    } 
}, 

注意,當數據被髮送到服務器PDTime是一個對象。您可以簡化後返回使用serializeRowData事件(look here)這個事件一個一個或多個值是jqGrid的事件,你可以做這樣的:

...jqGrid({ 
.... 
    serializeRowData : function(postdata) { 
     var hours = postdata.PDTime.Hours; 
     var minutes postdata.PDTime.Minutes; 
     posdata.PDTime = hours+":"+minutes; 
     // or what you want data combination 
     return postdata; 
    }, 
...