2016-09-17 7 views
1

매끄러운 격자로 데이터를 표시하려고합니다. 하지만 제 경우에는 대부분의 데이터가 선택 상자 형태로 제공됩니다. 여기에서 SelectCellEditor Option의 옵션을 확인합니다. 그러나 저장시 동적으로 채워진 값의 경우 값을 사용하여 사후 데이터를 사용하고 그리드에 텍스트를 표시하는 것이 도움이 될 것입니다. 이를 위해 나는Slick Grid 값을 선택한 후 Text를 표시하는 인라인 편집 기능이있는 SelectBox

function SelectCellEditor(args) { 
    var $select; 
    var defaultValue; 
    var scope = this; 

    this.init = function() { 

     option_str = ""; 
     args.column.options.forEach(function(data) 
     { 
      option_str += "<OPTION value='"+data.key+"'>"+data.value+"</OPTION>"; 
     }); 
     $select = $("<SELECT tabIndex='0' class='editor-select'>"+ option_str +"</SELECT>"); 
     $select.appendTo(args.container); 
     $select.focus(); 
    }; 

    this.destroy = function() { 
     $select.remove(); 
    }; 

    this.focus = function() { 
     $select.focus(); 
    }; 

    this.loadValue = function(item) { 

     defaultValue = item[args.column.field]; 
     $select.val(defaultValue); 
    }; 

    this.serializeValue = function() { 
     if(args.column.options){ 
      return $select.val(); 
     } 
    }; 

    this.applyValue = function(item,state) { 
     item[args.column.field] = state; 
    }; 

    this.isValueChanged = function() { 
     return ($select.val() != defaultValue); 
    }; 

    this.validate = function() { 
     return { 
      valid: true, 
      msg: null 
     }; 
    }; 

    this.init(); 
} 

아래로 내 데이터를 수정하지만, 여기에 내 문제는 내가 inital 부하에 텍스트 값을로드하고 드롭 다운 셀에서 값을 선택한 후 대신 선택 텍스트의 값으로 대체 할 수있다. 이 예에서 당신은 또한 당신의 열 정의에 formatter을 추가해야합니다 아래의 형식

var data =[{"key":"1","value":"Item1"},{"key":"2","value":"item2"}]; 

답변

1

같이 데이터를 생성했다. 예 :

{id:'id',name:'thename',...,options:data, editor: SelectCellEditor,formatter:SelectCellFormatter} 

SelectCellFormatter :

SelectCellFormatter: function(row,cell,value,columnDef, dataContext){ 
     // filter options based on key value 
     var ret = columnDef.options.filter(function(a){return a.key==value}) 
     // return the value 
     if(ret.length>0){ 
      return ret[0].value; 
     } else { 
      return null; 
     } 

    }