2017-02-11 2 views
1

jqGrid 포매터 : 원격 json url에 대해 "actions"를 사용하려고했지만 열 이름과 실제 반환 된 데이터의 수가 일치하지 않으므로 행을 이동합니다 act 열은 열 이름에서 여분의 열입니다). 나는 온라인으로 검색했고, 모든 예제는 지역 데이터 (페이지)에서 json이 키/값으로 사용되는 것처럼 보이지만 url : somepage.php는 csv 종류의 열 (키가없고 값 만)을 리턴한다. . 또한 모든 예제는 ID를 표시하는 동안 숨겨진 필드로 ID를 사용합니다. 또 하나의 숨겨진 열을 사용합니다. 여기 내 colmodel입니다 :jqGrid : formatter : 원격 json url에 대해 "actions"가 작동하지 않습니다.

url: "manager_json", 
       editurl: "manager_edit", 
       datatype: "json", 
       //data: mydata, 
       width:1000, 
       //jsonReader: { 
       //    repeatitems : false, 
       //   }, 
       colNames: ["","Id","Uid","Custom Id","Image Name","Coord. X","Coord. Y","Gender","Progress","Status","Created","Updated"], 
       colModel: [{"name":"act","template":"actions","formatoptions":{"editformbutton":true}},{"name":"id","align":"center","width":33,"editable":false,"hidden":true},{"name":"uid","align":"center","width":33,"editable":true,"hidden":true,"editrules":{"edithidden":false,"required":false}},{"name":"ta_id","align":"center","width":100,"editrules":{"required":true}},{"name":"image","width":150,"template":"text","editrules":{"required":true}},{"name":"x","width":100,"align":"center","template":"integer","editrules":{"required":true}},{"name":"y","width":100,"align":"center","template":"integer","editrules":{"required":true}},{"name":"gender","width":100,"align":"center","formatter":"select","stype":"select","editrules":{"required":true},"edittype":"select","editoptions":{"value":"f:Female;m:Male","defaultValue":"m"},"searchoptions":{"sopt":["eq","ne"],"value":":Any;f:Female;m:Male"}},{"name":"progress","width":120,"align":"center","formatter":"select","stype":"select","editrules":{"required":true},"editable":false,"edittype":"select","editoptions":{"value":"-:New;pf:Process Failed;ps:Process Scheduled;pss:Process Success;p:Processing...;s:Staging;tf:Test Failed;ts:Test Scheduled;tss:Test Success;t:Testing...","defaultValue":"m"},"searchoptions":{"sopt":["eq","ne"],"value":":Any;-:New;pf:Process Failed;ps:Process Scheduled;pss:Process Success;p:Processing...;s:Staging;tf:Test Failed;ts:Test Scheduled;tss:Test Success;t:Testing..."}},{"name":"status","width":100,"align":"center","formatter":"select","stype":"select","edittype":"select","editoptions":{"value":"a:Active;n:New","defaultValue":"m"},"searchoptions":{"sopt":["eq","ne"],"value":":Any;a:Active;n:New"}},{"name":"date_created","width":150,"template":"text","editable":false},{"name":"last_updated","width":150,"template":"text","editable":false}] 

그리고 여기 내 서버 (DB)에서있는 jqGrid의 사양에 따라, 내 실제 데이터 :

{"page":1,"total":1,"records":7,"rows":[{"id":32,"cell":[32,"889daf31ff3e49544f52850258439600","2uu","2ok",2,2,"m","-","a","2017-02-10 18:57:05","2017-02-10 23:37:12"]},{"id":30,"cell":[30,"","11","11",1,1,"m","-","a","2017-02-10 18:01:52","2017-02-10 18:01:52"]},{"id":29,"cell":[29,"aaa","ww222111uu","11",1,1,"m","-","a","2017-02-10 18:00:36","2017-02-10 23:37:08"]},{"id":27,"cell":[27,"","11","1",1,1,"m","-","a","2017-02-10 17:57:41","2017-02-10 17:57:41"]},{"id":25,"cell":[25,"","4tt","4img",4,4,"f","-","n","2017-02-10 17:50:21","2017-02-11 00:26:03"]},{"id":24,"cell":[24,"","1","1",1,1,"m","-","a","2017-02-10 17:49:38","2017-02-10 17:49:38"]},{"id":22,"cell":[22,"","bbb","imam 222",2,22,"f","p","n","2017-02-08 20:14:55","2017-02-10 13:27:57"]}]} 

당신이 휴대 행 colNamescolModel보다 열이 볼 수 있듯이 . id 및 uid 열이 숨겨져 있습니다. 나는 dB에서 추가 가짜 열을 추가하지만, 내가 미리 4.13.7있는 jqGrid를 사용하고

도움이되지 않았다

답변

1

난 당신이

{ 
    "id": 32, 
    "uid": "889daf31ff3e49544f52850258439600", 
    "ta_id": "2uu", 
    "image": "2ok", 
    "x": 2, 
    "y": 2, 
    "gender": "m", 
    "progress": "-", 
    "status": "a", 
    "date_created": "2017-02-10 18:57:05", 
    "last_updated": "2017-02-10 23:37:12" 
} 

대신

같은 개체를 반환하는 것이 좋습니다 것
{ 
    "id": 32, 
    "cell": [ 
     32, "889daf31ff3e49544f52850258439600", "2uu", "2ok", 2, 2, "m", "-", "a", 
     "2017-02-10 18:57:05", "2017-02-10 23:37:12" 
    ] 
} 

을 서버 응답으로 사용합니다. 코드를 단순화합니다. 당신은 데이터의 현재 형식을 처리해야하는 경우

, 당신은 옵션

jsonReader: { 
    repeatitems: false 
} 

하고있는 요소의에서있는 jqGrid을 알려 colModeljsonmap 속성을 사용하기를 사용하여 repeatitems: false 모드를 강제해야한다 항목 1은 열 데이터를 읽어야합니다. jsonmap 중 하나

jsonmap: "cell.1" 

같은 문자열 형태 나 기능의 형태가 될 수있다 : 당신이

var columnOrder = { 
     id: 0, 
     uid: 1, 
     ta_id: 2, 
     image: 3, 
     x: 4, 
     y: 5, 
     gender: 6, 
     progress: 7, 
     status: 8, 
     date_created: 9, 
     last_updated: 10 
    }; 

같은 객체를 정의 할 수있는 코드를 잘 유지 관리하려면

jsonmap: function (item) { 
    return item.cell[1]; 
} 

하는 cell에 인덱스를 열 이름으로 제공하고 jsonmap

과 같이 사용합니다.
jsonmap: function (item) { 
    return item.cell[columnOrder.uid]; 
} 

데모 https://jsfiddle.net/OlegKi/ozzgnaeh/2/은 방법을 보여줍니다.

+0

이유 사전 형식이 아닌 배열 형식을 사용하려고 했으므로 페이지 당 약 5000 개의 행이 필요하므로로드 시간과 크기가 최소화됩니다. 제안 된 데이터 형식이 도움이되었습니다. 이제 작동합니다. 올렉 감사합니다. – LSP

+0

@LSP : 천만에요! 문제가 해결되면 대답을 [받아 들여야]합니다 (http://meta.stackexchange.com/a/5235/147495). 나는 당신이 행의 수에 해당하는 페이지 크기를 사용할 것을 권한다. 예를 들어'rowNum : 25' 또는'rowNum : 20'과 같이 모니터에 표시 될 수있다. 'rowNum : 5000'을 사용하면 페이지가 훨씬 느려지고 사용자에게 이점이 없습니다. 페이지 당 60000 개의 행과 10 개의 행이있는 [데모] (http://www.ok-soft-gmbh.com/jqGrid/OK/performane-15-60000-25-free-jqgrid.htm)를 사용해보십시오.1 페이지 당 1000 행 모두 1000 개의 행처럼 더 빠릅니다. – Oleg

+0

나는 "이 대답을 받아 들인다"라고 쓰여있는 버튼을 보지 않았습니다 ... 어디입니까? – LSP

관련 문제