2010-08-05 2 views
4

place_id의 custom_value는 내가 먼저 클릭하는 행으로 설정됩니다. 연속 된 클릭 행은 모두 실제 값과 상관없이 동일한 값을 사용합니다. 왜?jqgrid - edittype의 custom_value를 설정합니다. 'custom'

예 :

place_id foo_name bar_value 
    10  blah  abc 
    11  blah2  fgr 

10의 place_id로 행을 클릭하고 "편집"및 place_id 값에 대해 10있을 것이다 표시되는 형식을 클릭합니다. 변경 한 다음 저장하고 다음 행을 클릭하십시오. 다른 모든 값은 올바르지 만 양식은 여전히 ​​10의 place_id를 갖습니다.

내 코드 :

열 place_id은 다음과 같습니다

{name:'place_id', index:'place_id', editable: true, edittype:'custom', 
editoptions: { custom_element:myelem,custom_value:myval }} 

myval 기능은 다음과 같습니다

myval로 설정 될 때까지
function myval(elem){ 
    return elem.val(); 
} 

내가해야 할 것은 편집중인 행의 올바른 place_id Firebug의 elem 객체를 살펴봤을 때 항상 첫 번째로 클릭 한 행의 값이 있다는 것을 알았지 만 이유를 이해하지 못하거나 올바른 값을 어디서 얻을 수 있는지도 알지 못합니다. 모든 제안을 (나는 jqgrid 포럼에 물어 봤지만 아무것도 그것의 stackoverflow 돌고있어) 와서 감사했습니다.

* 편집 : edittype:'custom' 대신 edittype:'text'을 사용하면 올바른 값이 표시되고 전달되지만 해당 열은 편집 가능하며 표시 만 가능하지만 편집 할 수는 없습니다.

전체 코드 :

jQuery(document).ready(function(){ 
    jQuery("#list").jqGrid({ 
     url:'/foo/bar/results', 
     datatype: 'json', 
     mtype: 'POST', 
     colNames:['Place ID', 'Site ID', 'Site Name', 'API ID', 'M Type'], 
     colModel :[ 
      {name:'place_id', index:'place_id', key: true, sorttype:'integer', 
      width:70, editable: true, edittype:'custom', 
      editoptions: {custom_element:myelem,custom_value:myval }}, 
      {name:'site_id', index:'site_id', sorttype:'integer', width:70, 
      editable: true, edittype: 'select', editrule: {required: true}, 
      editoptions:{value:getSites(), size:30}}, 
      {name:'site_name', index:'site_name', width:150, editable: false, 
      editrule: {required: true}, editoptions: {size:30}}, 
      {name:'api_id', index:'api_id', sorttype:'integer', width:75, 
      editable: true, edittype: 'text', editrules: {required: true}, 
      editoptions:{size:30}}, 
      {name:'m_type', index:'m_type', width:150, editable: true, 
      edittype: 'select', editrules: {required: true}, 
      editoptions:{value:{'one':'one','two':'two','three':'three', 
           'four':'four'},size:30}} 
     ], 
     editurl:'/foo/bar/editinfo',  
     height: 'auto', 
     width: 'auto', 
     pager: '#pager', 
     viewrecords: true, 
     loadonce: true, 
     rowNum:20, 
     rowList:[20,40,60,80,100], 
     caption: 'Meter Listing' 
    }); 

    // Edit functionality 
    $("#editfields").click(function(){ 
     var gr = jQuery("#list").jqGrid('getGridParam','selrow'); 
     if(gr != null) { 
      jQuery('#list').setGridParam({datatype:'json'}); 
      jQuery("#list").jqGrid('editGridRow',gr, 
          {editCaption: 'Edit Place Details',height:550, 
          closeAfterEdit:true,width:600,reloadAfterSubmit:true}); 
     } else { 
      alert("Please select a row"); 
     } 
    }); 
}); 

function myelem(value,options){ 
    return $('<input type="text" value="'+value+'" disabled="disabled"/>'); 
} 

function myval(elem){ 
    return elem.val(); 
} 

EDIT2 :

getSites :

function getSites(){ 
    <?php 
    $sites = "0:Select"; 
    foreach ($this->sites as $k => $v){ 
     $sites = $sites . ";" . $v['site_id'] . ":" . $v['site_name']; 
    } 
    ?> 
    return "<?= $sites ?>"; 
} 
+0

'myelem' 코드도 게시 할 수 있습니까? – Oleg

+0

이 추가되었지만 ... 'value'가 어디서 왔는지는 모르겠지만 .... 흠과'options'는 사용되지 않습니다. – Stuart

+0

'getSites' 함수의 코드를 게시 할 수 있습니까? – Oleg

답변

5

당신이 place_id 컬럼의 정의에 key: true 포함을 시도 할 수 있습니다. 서버에서 보낸 데이터에서 id을 제거 할 수 있습니다.

도움이되지 않으면 문제를 재현하는 전체 코드 예제를 게시해야하며 해결 방법을 찾으려고 노력할 것입니다.

업데이트 : 언젠가는 복잡한 문제에 대한 간단한 해결책이 있습니다. 매개 변수의 기능 myelem를 사용하지 않고

recreateForm: true 

선택한 행의 첫 번째 편집에서 한 번만 호출됩니다 : editGridRow 기능 중 하나 개는 추가 매개 변수가 문제를 해결. 그러면 양식이 캐시되고 은 다시 작성되지 않습니다.. 따라서 항상 같은 행을 편집하게됩니다. 매개 변수 recreateForm: true을 포함하면 때마다 양식이 작성됩니다.그런데

은 내가 jQuery.jgrid.defaults, jQuery.jgrid.edit, jQuery.jgrid.view, jQuery.jgrid.deljQuery.jgrid.nav을 확장 당 모든 jqGrids에서 사용하는 몇 가지 일반적인 설정을 설정합니다. 예를 들어 항상 사용합니다

jQuery.extend(jQuery.jgrid.edit, { 
    closeAfterAdd: true, 
    closeAfterEdit: true, 
    recreateForm: true, 
    //... 
}); 

그렇다면 나중에이 매개 변수를 설정할 필요가 없습니다. 답변을 작성하는 동안 Add multiple input elements in a custom edit type field에 대한 사용자 지정 편집도 설정되어 있으므로 문제가 발생하지 않았습니다.

+0

'key : true'가 도움이되지 않았습니다. 좀 더 완전한 코드 샘플을 추가했습니다. 이것 좀 봐 줘서 고마워, 올렉. – Stuart

+0

'getSites'를 추가했습니다. – Stuart

+0

페이지를 새로 고치면 place_id를 다시 선택할 수 있으며 첫 번째 선택에 맞습니다. 그 후에도 문제는 남아 있습니다. 페이지를 다시로드하는 것만 작동합니다. – Stuart