2012-06-19 4 views
1

나는 이미 연구를했으며, 사용자 정의 포매터 또는 편집기를 만드는 방법과 사용법을 알고 있습니다. 제 문제는 설정하거나 포맷터를 사용할 수 없다는 것입니다. 내 구조 :SlickGrid에서 포맷터를 설정하려면 어떻게해야합니까?

JQuery와는 다음과 같습니다

<script type="text/javascript" src="jquery-1.7.2.min.js"></script> 


    <script type="text/javascript" src="jquery.event.drag-2.2.js"></script> 
    <script type="text/javascript" src="slick.core.js"></script> 
    <script type="text/javascript" src="slick.editors.js"></script> 
    <script type="text/javascript" src="slick.formatters.js"></script> 
    <script type="text/javascript" src="slick.grid.js"></script> 

모든 위의 편집되지 않은 것입니다.

     var grid; var cols; var rows; var options = { 
          enableCellNavigation: true, 
          enableColumnReorder: false, 
          forceFitColumns: true 
         }; 
*rows and cols come from server side via JSON.parse* 
grid = new Slick.Grid("#results", rows, cols, options); 

서버에서 오는 행과 COLS 변수를 채우는 코드는, 기본적으로 이것이다 : 코드 그리드를 구현하는 그림 열 그렇게되면

  cols: 
      echo json_encode('[ 
        {"id":"price",  "name":"Ár",    "field":"price"}, 
        {"id":"location", "name":"Elhelyezkedés",  "field":"location"}, 
        {"id":"egyeb",  "name":"Lófasz",   "field":"egyeb"}, 
        {"id":"pic",  "name":"Képek",    "field":"pic", "formatter":"Slick.Formatters.PercentComplete"} 
       ]'); 
      rows: 
      echo json_encode('[ 
        {"price": "5", "location":"AlsóBélaCsecselény",  "egyeb":"lófasz", "pic":"1", "link":"ezittahelye"}, 
        {"price": "6", "location":"qrsóBéqrcselény",  "egyeb":"lófasz", "pic":"2", "link":"ezittahelye"}, 
        {"price": "7", "location":"AlsóBélaqwqwrelény",  "egyeb":"lófasz", "pic":"3", "link":"ezittahelye"}, 
        {"price": "8", "location":"qwrCsecselény",   "egyeb":"lófasz", "pic":"4", "link":"ezittahelye"} 
       ]'); 

모든 것이 잘 작동 포매터가 없는데 그리드는 실수로 "formatter"태그 (예 : "fformatter"또는 기타)와 같은 열에 대한 추가 속성으로 작동하지만

하지만 자바 스크립트는 매번 다음 오류를 제공합니다. JSON 코드 h

catch되지 않은 예외 : 형식 오류 :는 "포맷"속성으로 'getFormatter (행, m은)'기능

나는 테이블을로드 할 때마다 빌어 먹을 시간 포맷터 엉망 모든 것을 내가 돈없는 다음에해야 할 일을 알지 못한다! 내가 버그를 다시 추적하려고하고 slick.grid.js의 소스 코드의 1124 라인에 저를 이끌어,이 기능은 어떻게 든 return 문에 모든 것을 ..

function getFormatter(row, column) { 
    var rowMetadata = data.getItemMetadata && data.getItemMetadata(row); 

    // look up by id, then index 
    var columnOverrides = rowMetadata && 
     rowMetadata.columns && 
     (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]); 

    return (columnOverrides && columnOverrides.formatter) || 
     (rowMetadata && rowMetadata.formatter) || 
     column.formatter || 
     (options.formatterFactory && options.formatterFactory.getFormatter(column)) || 
     options.defaultFormatter; 
} 

어떤 도움이 될 것이다 나누기 고맙다!

편집 :

      $.post("queries.php?event=search&&phase=columns", $("#full_search").serialize(), function(data){ 
            cols = JSON.parse(data); 
            alert(cols[1].id); 
            $.post("queries.php?event=search&&phase=rows", $("#full_search").serialize(), function(data){ 
             rows = JSON.parse(data); 
             alert(rows[1].link); 
             grid = new Slick.Grid("#results", rows, cols, options); 
             alert(grid.getData().length); 
             return false; 
            },"json"); 
           return false; 
          },"json"); 
          },"json"); 

답변

2

Slick.Formatters.PercentComplete 문자열 안 : 여기가 코드 서버에서 얻을 방법입니다. slick.formatters.js에 정의 된 함수 (클래스 생성자)입니다.

+0

포스트 콜을 통해 JSON을 얻는 방법을 보여주는 포스트를 편집했습니다. 이 주위에 어떤 방법이 있습니까? "Slick.Formatters.PercentComplete"에서 아포스트로피를 삭제하면 구멍 스크립트가 JSON.parse 줄에서 중단됩니다. –

+0

"formatter"를 "Slick.Formatters.PercentComplete"에서 "formatter"로 변경하십시오. Slick.Formatters.PercentComplete. – Tin

+0

그러면 구멍 스크립트가 JSON.parse 줄에서 깨질 것입니다.이 문제를 해결할 방법이 있습니까? 게시물 요청을 통해 JSON 코드를 어떻게 보내야하는지 모르겠습니다. –

0

데이터가 JSON을 통해 들어오는 사용자의 경우 개체 호출은 여전히 ​​따옴표로 묶어야합니다. 이 구제 된 곳 그러나, 나는 slick.grid.js 파일의 부분을 찾을 수 있었다 : 나는 이런 식으로 뭔가를 제안

if (d) { 
    if(m.formatter){m.formatter=eval(m.formatter)} // make it an object call instead of string 
    stringArray.push(getFormatter(row, m)(row, cell, value, m, d)); 
} 
2

Alright I solved it! I parsed the data, and then set the formatter string to an object: cols = JSON.parse(data); cols[3].formatter = Slick.Formatters.PercentComplete; and that does it! Thank you for your help!

.

Slick.Formatters.PercentComplete는 함수이며, http://json.org과 같이 json에는 함수가 없습니다. 또한 함수가있는 JSON에서는 유효성 검사가 실패합니다. 여기 유효성을 검사 해보십시오 : http://jsonlint.com/.

JSON에서 기능을 사용할 수 없습니다. 그런 다음 '거의 JSON'데이터를받은 후 자바 스크립트로 클라이언트에서 파싱해야합니다.

샘플을 보내 주셔서 감사합니다. 나는 같은 문제가있어 도움이되었다.내 경우

내가 jQuery를 아약스와 메타 데이터를 얻을 :

{"errors":{}, 
"columns":[{"formatter":"TaskNameFormatter", 
      "field":"1", 
      "id":"1","width":220,"name":"Hierarchy1","cssClass":"cell-title"}, 
      OTHERS_COLUMNS]} 

이 포맷터는 여전히 문자열입니다 실현 : 반환

req = $.ajax({type: 'GET', 
       url: url, 
       dataType: 'json', 
       async: false}).done(function(meta) { metadata = meta; }); 

메타 데이터는이 같은 것입니다. 그런 다음이 코드를 사용하여 String에서 Function으로 포매터를 변경하는 과정을 거칩니다.

$.each(metadata.columns, function(index, value) { 
           if(typeof value.formatter != "undefined") { 
           value.formatter = eval(value.formatter); 
           } 
    }); 
관련 문제