저는 간단한 작업에서 첫눈에 며칠 - 이미 사용자 정의 셀을 구현하고 있습니다. 작업은 다음과 같습니다. id가있는 div 요소 (예 : "mydiv"
)를 사용하여 사용자 정의 셀을 만들고이 div의 함수를 $('#mydiv').raty({start: cellvaue, readonly:true})
과 같이 호출 한 다음 3 번째 하위 작업 - 편집 모드 (editGridRow
)에서 변경해야합니다. 값을 변경하는 것이 가능한 것처럼 raty 기능의 매개 변수를 readonly:false
으로 변경하십시오.사용자 정의 셀 구현 jqGrid : raty-plugin 통합
먼저 포맷터를 사용했습니다. 포맷터에서 나는 div 함수를 정의하고, afterInsertRow 함수를 $ ('# mydiv') 함수로 호출하여 정의했다. 개요를 위해 그것은 완벽하게 작동했습니다. 그러나, editGridRow
의 모달 편집 대화 상자에서 양식 입력 텍스트가 항상 렌더링되었으므로 여기서는 필요하지 않습니다. 아직 여기에 div 요소 만 필요합니다. 포맷터가 올바르게 이해한다면 포맷터는 값을 수정 만하지만 양식 입력 텍스트를 렌더링합니다.
그런 다음 edittype: custom
으로 전환되었지만 이러한 기능이 처음으로 editGridRow에서만 호출되기 때문에 도움이되지 않습니다.
이 문제는 해결할 수 있다고 확신합니다. 유일한 문제는 방법입니다.
모든 정보 주셔서 감사합니다.
업데이트 올레그 덕분에 지금은이 작업의 기능 구현에 매우 가깝습니다. 여기서 나는 Oleg의 충고에 기초하거나 적어도 그의 조언을 해석 할 때 나의 해결책을 설명 할 것이다. jqGrid는 datatype: "json"
으로 정의됩니다. 다음과 같이
name:'ranking', editable:true, edittype:'custom',formatter:ratingFormatter,
editoptions:{custom_element:ratingFormatter, custom_value:ratingValue}
언급 된 기능이 정의되어 있습니다 : 은 사용자 정의 셀로 정의
function ratingFormatter(cellvalue, options, rowObject) {return '<div class="rnk"></div>';};
function ratingValue(elem, operation, value) {return $('#ranking-score').val();};
그런 다음 모달 편집 대화 :
ondblClickRow: function(id) {
jQuery('#grid').jqGrid('editGridRow',id,
{closeOnEscape:true,width:400,
savekey:[true,13],
recreateForm:true,beforeShowForm:initRating
});
initRating 기능 :
function initRating() {$('#ranking').raty({path:'/img/'})};
그리고 마지막으로 loadComplete 이벤트
loadComplete: function (data) {
var ids = jQuery("#grid").getDataIDs();
for(var i=0;i<ids.length;i++){
var rowid = ids[i];
var ranking = data.rows[i].cell[6];
$('#' + rowid +'> td > div.rnk').raty({path:'/img/',start:ranking,readOnly:true});
$('#' + rowid).contextMenu('MenuJqGrid', eventsMenu);
}
}
등급 플러그인과 같은 작은 단계를위한 많은 단계. 믿을 수 없는. 마지막으로 해결되지 않은 문제는 현재 등급 점수를 initRating 함수로 가져 오는 것입니다. 즉, 내가 editGridRow에 가서 등급 점수를 이미 정의하지 않았다는 의미입니다. 흠.
ad. 'recreateForm : true' - 이미이 글을 읽었습니다. 제 경우에는 작동하지 않았습니다. 왜 그런지 모르지만, 지금은 가장 큰 질문이 아닙니다. 광고. readonly-parameter의 변경 -이 매개 변수를 변경하는 것은 쉽지 않기 때문에 새로운 매개 변수를 사용하여 다시 raty 함수를 호출합니다. 광고 ID = 'mydiv'- 당신이 바로 그게 버그 것입니다, 그래서 나는 이드에게 rowid를 추가 할 수 있습니다. 광고 loadComplete : 나는 raty 함수에 row.ranking 매개 변수를 전달해야합니다. loadComplete 내부에서이 작업을 수행 할 수 있습니까? – Anatoliy
@Anatoliy : 아마도 당신은 틀린 장소에서'recreateForm : true'를 사용했을 것입니다. if는'navGrid' 함수의'prmEdit' 또는'prmAdd' 매개 변수의 일부 여야합니다 (예 : http://stackoverflow.com/questions/3951233/jqgrid-need-a-field-editable-on-add- 대화 상자가 아닌 편집 대화 상자/3952654 # 3952654) 또는 일반 기본 설정의 일부로 사용할 수 있습니다 (http://stackoverflow.com/questions/4644180/jqgrid-common-parameters-of-the-form-editing- 대화 상자 - 방법/4652201 # 4652201). 'recreateForm : true'를 설정하지 않으면'custom_element'와'custom_value'를 성공적으로 사용할 수 없습니다. – Oleg
@Anatoliy : 'readOnly'변경이 Star Rating Plugin에서 지원되는지 확신 할 수 없습니다. 다른면에서는 ** 당신이 그것을 필요로하지 않는다고 생각합니다 **. 양식을 편집하여 행을 편집하려면 ** 새 등급 ** 컨트롤이 양식 편집 대화 상자에 생성됩니다. 'editoptions'의'dataInit' 또는'beforeShowForm' 이벤트의 내부에서'.raty ({readOnly : false})'를 사용하면'readOnly : false'를 사용하여 편집 폼의 Star Rating 컨트롤을 초기화 할 수 있습니다. 그리드에서 'readOnly : true'를 반환합니다. – Oleg