2011-01-27 2 views
3

FlexBox (http://www.fairwaytech.com/flexbox) 컨트롤에서 값을 가져 오는 jqGrid에 필드/열이 있습니다. 그리드에 데이터를 편집/추가하기 위해 양식을 로컬로 사용한 다음 전체 데이터를 전체적으로 서버에 제출합니다. FlexBox 컨트롤을 컨트롤 작성, 값 가져 오기 등의 기능을 갖춘 사용자 정의 컨트롤로 구현했습니다. (editoptions : {custom_element : myCustomElem, custom_value : myCustomValue, ...)jqGrid 포맷터가 원본 데이터를 수정합니까?

코드/값 쌍 (일반 HTML 선택과 매우 비슷 함)을 표시하고 그리드에서 값을 표시하려고하지만 코드를 서버에 보내려고합니다. 서버에서 데이터를로드하면 코드/값 쌍이 생깁니다.

그래서 포맷터가 원 데이터를 돌이킬 수없는 방식으로 수정하는 것만 알면 맞춤식 포맷터/unformatter를 작성하려고했습니다. 따라서 일단 포맷터에서 값을 반환하면 (즉, 표 셀에 데이터를 표시 할 때) 코드가 손실됩니다. 따라서 unformatter가 호출 될 때 (즉, 서버에 데이터를 보낼 때) 코드는 더 이상 존재하지 않습니다!

그리드는 다음과 같은 옵션이 설정됩니다 추가/편집에 대한 내 navGrid 옵션에

cellsubmit: 'clientArray', datatype: 'clientSide', editurl: '/dummy' 

내가 인 flexbox 제어를 구성하는 beforeShowForm 기능을 가지고있다. FlexBox 컨트롤에는 2 개의 필드가 있는데 하나는 일반 입력이고 다른 하나는 숨겨집니다. hidden은 코드를 유지하고 normal은 값을 유지/표시합니다.

myCustomValue 함수는 다음과 같다 :

function myCustomValue (elem, action, val) { 
     var value = val, code = val; 
     if(action == 'get') { 
     code = $('input[id="' + $(elem).attr('id') + '_div_hidden"]').val(); 
     value = $('input[id="' + $(elem).attr('id') + '_div_input"]').val(); 
     } 
     else { 
     $('input[id="' + $(elem).attr('id') + '_div_input"]').val(value); 
     } 
     return (code == value ? value : code + '||' + value); 
} 

그래서 기본적으로는 코드와 값을 얻고로 구분 한 쌍으로 그들을 반환의 '||' (사용자 지정 구분 기호).

function myFormatter(cellvalue, options, rowdata, action) { 
    if(cellvalue == '') 
     return cellvalue; 
    var codeValuePair = cellvalue.split('||'); 
    if(codeValuePair && codeValuePair.length > 1) 
     // I use a hidden span to store the code because otherwise I lose the code!!! 
     // This is where the problem starts! If I just return codeValuePair[1] (description) 
     // I lose the code forever! 
     return '<span class="md-flexbox-code" style="display:none;">' + codeValuePair[0] + '</span>' + codeValuePair[1]; 
    else 
     return cellvalue; 
} 

숨겨진 코드로 범위가있는 경우 언 포맷터 여부를 확인하고 만약 그렇다면, 그를 반환

내 사용자 정의 포맷은 다음과 같이한다.

내가 누락 된 항목이 있습니까? 나에게 포맷터는 단지 데이터를 수정하는 것이 아닌 것으로 보여진다.

답변

0

개인적으로 FlexBox을 사용하고 있지 않습니다. jqGrid에서 처음 사용할 때는

editoptions: { 
    dataInit : function (elem) { 
     $(elem).flexbox(/*flexbox parameters which you need*/); 
    } 
} 

의 해당 열 정의가 필요합니다. 하지만 아마도 나는 뭔가를 놓친다.

그리드에서 로컬 데이터를 가져 오는 데 사용하는 방법은 무엇입니까? 로컬 데이터 페이징을 사용합니까? 아마도 the question과 같은 가까운 문제가 있습니까?

포맷터는 값을 그리드 내부의 컨트롤로 표시하기 만하고 unformatter는 셀에서 데이터를 읽는 것입니다. 귀하의 경우 데이터를 수정하려면 custom_value의 올바른 구현이 중요합니다. myCustomValue에 의해 반환 된 값은 그리드에 저장됩니다.

문제가 계속되면 더 많은 코드를 추가해야합니다.

+0

그리드는 다음 옵션으로 설정됩니다. – AsGoodAsItGets

+0

@AsGoodAsItGets : 어떤 옵션이 있습니까?질문 텍스트를 수정하고 추가 정보를 추가 할 수 있습니다. – Oleg

+0

그리드는 다음 옵션으로 설정됩니다 : cellsubmit : 'clientArray', 데이터 유형 : 'clientSide', editurl : '/ dummy' Add/Edit에 대한 navGrid 옵션에서 FlexBox 컨트롤을 생성하는 beforeShowForm 함수가 있습니다. FlexBox 컨트롤에는 2 개의 필드가 있는데 하나는 일반 입력이고 다른 하나는 숨겨집니다. hidden은 코드를 유지하고 normal은 값을 유지/표시합니다. editoptions.dataInit 제안은 여기에 관련이 없습니다. 인라인 편집을 수행하지 않기 때문입니다. jqGrid에서 데이터와 프레젠테이션간에 구분이 없습니다 (예 : ExtJS로 작업 한 적이 있다면 "데이터 저장소"가 없습니다). – AsGoodAsItGets

관련 문제