분기가 폴더이고 리프가 파일 인 파일 시스템을 나타내는 jqGrid TreeGrid가 작성되었습니다.을 사용하여 새 "파일"을 만들기 위해 TreeGrid에서 기능을 구현했습니다. 그러나 새 폴더를 만드는 기능을 추가하려고합니다. 우리의 스크립트는 새로운 폴더를 생성하지만 TreeGrid에 페이지가 다시로드되지 않는 한 즉시 표시되지 않습니다. 그러나 TreeGrid를 다시로드하면 모든 폴더가 축소되므로 특히 성가신 일입니다.jqGrid에 새 행 추가 Treegrid 모델
TreeGrid의 노드를 선택적으로 새로 고치거나 기능이 추가 된 새 분기를 추가 할 수 있습니까? addJSONData
에 대한 일부 문서를 보았지만이 함수를 사용하면 새로 고칠 때까지 TreeGrid가 완전히 제거됩니다. 또한 addChildNode
을 사용하여 특정 속성을 변경하려고 시도했으며 DOM 조작을 사용하여 행에 수동으로 추가하려고했습니다. 그러나이 두 가지 방법 모두 삽입 된 노드를 손상시킵니다.
편집 :
ret = {"error":"","total":1,"page":1,"records":1,"rows":[{"id":"1113","name":"test","uri":"accounting\/test\/","parent":1,"isLeaf":false,"expanded":true,"loaded":true}]}
내가 사용에 추가하려고 :
grid[0].addJSONData(ret);
초기를 A는 새 폴더 JSON 요청을 반환
var grid = $("#grid");
grid.jqGrid({
treeGrid: true,
treeGridModel: "adjacency",
ExpandColumn: 'name',
ExpandColClick: true,
url:"",
datatype:"json",
colNames:['id','Name','Authorization','Views','Uri'],
colModel:[ {name:'id', index:'id', hidden:true, key:true},
{name:'name', index:'name', sorttype:"text", width:3, sortable:false},
{name:'auth',index:'auth', sorttype:"text", sortable:false, hidden:true},
{name:'views',index:'views', sorttype:"integer", width:1, sortable:false, align:"center"},
{name:'uri',index:'uri',sorttype:'text',sortable:false,hidden:true}],
jsonReader:{ root:"rows"
,page:"page"
,total:"total"
,records:"records"
,repeatitems:false
,cell:""
,id:"0"
,userdata:""
},
multiselect:false,
autowidth:true,
height:"auto",
sortable:false,
toppager:true,
hidegrid: false,
loadui: 'block',
pager:"#grid_pager",
caption: "Files",
});
이 같이 보입니다 로드 된 데이터는 JSON 형식으로 전송됩니다.
{"rows":[
{"id":"1","uri":"afolder\/","parent_id":"0","name":"afolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"4","uri":"bfolder\/","parent_id":"0","name":"bfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"7","uri":"cfolder\/","parent_id":"0","name":"cfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"20","uri":"dfolder\/","parent_id":"0","name":"dfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"48","uri":"efolder\/","parent_id":"0","name":"efolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"179","uri":"ffolder\/","parent_id":"0","name":"ffolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"182","uri":"gfolder\/","parent_id":"0","name":"gfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"186","uri":"hfolder\/","parent_id":"0","name":"hfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"201","uri":"ifolder\/","parent_id":"0","name":"ifolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"239","uri":"jfolder\/","parent_id":"0","name":"jfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"253","uri":"kfolder\/","parent_id":"0","name":"kfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"262","uri":"lfolder\/","parent_id":"0","name":"lfolder","level":0,"parent":"0","isLeaf":"false"},
{"id":"274","uri":"mfolder\/","parent_id":"0","name":"mfolder","level":0,"parent":"0","isLeaf":"false"}
]}
코드를 추가하면 많은 추가 정보를 얻을 수 있으므로 항상 도움이됩니다. 당신이 사용하는 TreeGrid에 대해 더 많이 설명해 주시겠습니까? 로컬 데이터를 사용하거나 서버에서 데이터를로드합니까? 한 번에 전체 그리드를로드합니까 아니면 상위 노드를 확장 할 때 하위 노드를로드합니까? 네가 가지고있는 그리드 모델 : 중첩 세트 모델 또는 인접 모델. 트리 그리드에 추가해야하는 새 폴더에 대한 정보를 얻는 방법은 무엇입니까? 일부 페이지 입력 컨트롤의 정보가 채워지거나 서버에서로드되는 경우? – Oleg
인접성 모델을 사용하고 노드가 확장됨에 따라 MySQL 데이터베이스에서 JSON 요청으로 데이터를 조각으로 가져옵니다. 새 폴더에 대한 정보는 AJAX 요청을 통해 데이터베이스에 새 폴더 레코드를 만드는 JSON 요청에서 반환됩니다. 코드 추가. – shmeeps
미안하지만 아직도 상황을 이해하지 못합니다. 먼저 트리 그리드에 서버의 데이터를 채 웁니다. 사용자가 트리 노드를 클릭하면 노드의 하위 노드가 서버에서로드됩니다. 어떻게 한 노드 (폴더)를 추가해야합니까? 왜 새 폴더의 데이터에 부모 (' "parent": 1')가 들어 있습니까? 아마도 그리드를 채우는 방법을 이해하는 것이 주된 질문에 연결되어있을 것입니다. 당신은 "데이터를 조각으로"얻으려고했지만 데이터베이스에서는 썼다. 나는 그런 상황을 상상할 수 없다. 데이터베이스에서 SELECT를하면 모든 결과를 그리드로 보낼 수 있습니다. 그렇지? – Oleg