사용자가 범주를 구성 할 수 있도록 입력 도구로 트리를 사용하고 있습니다.Dijit 트리 내 노드 이동
사용자들이 최상위 레벨에서 노드를 이동할 수 있고, 특히 같은 부모 아래에서 노드 순서를 바꿀 수 있기를 바랍니다.
저장소가 업데이트 될 때까지 모든 것이 잘 보입니다. 디스플레이가 잘못되었습니다. 이동 된 항목이 올바른 위치에 표시되지 않습니다.
https://bugs.dojotoolkit.org/ticket/18142
require([
"dojo/aspect",
"dojo/store/Memory",
"dojo/store/Observable",
"dijit/Tree",
"dijit/tree/ObjectStoreModel",
"dijit/tree/dndSource",
"dojo/domReady!"
], function(aspect, Memory, Observable, Tree, ObjectStoreModel, dndSource) {
var observableStore, model;
var memoryStore = new Memory({
data: [{
"id": 10,
"position": 0,
"name": "top",
"parent": null
}, {
"id": 19,
"position": 18,
"name": "Audio",
"parent": 10
}, {
"id": 23,
"position": 19,
"name": "Monitors",
"parent": 10
}, {
"id": 20,
"position": 20,
"name": "Communication",
"parent": 10
}, {
"id": 21,
"position": 28,
"name": "Video",
"parent": 10
}, {
"id": 18,
"position": 29,
"name": "Camera",
"parent": 10
}, {
"id": 22,
"position": 40,
"name": "Five",
"parent": 21
}, {
"id": 24,
"position": 60,
"name": "Networking",
"parent": 21
}, {
"id": 25,
"position": 70,
"name": "Toasters",
"parent": 18
}],
mayHaveChildren: function(object) {
var children = this.store.getChildren(object);
return children.length > 0;
},
getChildren: function (object) {
return this.query({parent: object.id});
}
});
observableStore = new Observable(memoryStore);
model = new ObjectStoreModel({
store: observableStore,
query: {
name: "top"
}
});
aspect.around(memoryStore, "put", function(originalPut) {
// To support DnD, the store must support put(child, {parent: parent}).
// Since memory store doesn't, we hack it.
// Since our store is relational, that just amounts to setting child.parent
// to the parent's id.
return function(obj, options) {
if (options && options.parent) {
obj.parent = options.parent.id;
}
return originalPut.call(memoryStore, obj, options);
}
});
var tree =new Tree({
model: model,
dndController: dndSource,
betweenThreshold: 5,
showRoot: false,
persist: false
}, "category-tree").startup();
});
-이에 더 많은 시간을 투자 할 수있는,하지만 난 싶지 않아. 전통적인 접근 방식을 선택하고 읽기 전용 트리보기를 제공합니다.
** 오디오 **를 드래그하여 ** 비디오 **와 ** 카메라 ** 사이에 놓으면 사라집니다. – user2182349
정말 고마워요. 나는 그 비난 된 모듈들로 그 예를 보았고 그런 이유로 그것을 추구하지 않았다. – user2182349