ext2의tree id는 유일한 해결 방법이 아니다
해결 방법:
1단계:treeloader 클래스의createNode 다시 쓰기 방법
createNode : function(attr){
if(this.baseAttrs){
Ext.applyIf(attr, this.baseAttrs);
}
if(this.applyLoader !== false){
attr.loader = this;
}
attr.text = attr.dirname;
attr.id = attr.dirid;
attr.treeid = attr.type+attr.dirid;//
if(typeof attr.uiProvider == 'string'){
attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);
}
return(attr.leaf ?
new Ext.tree.TreeNode(attr) :
new Ext.tree.AsyncTreeNode(attr));
}
2단계: Ext.tree를 다시 작성합니다.TreePanel 클래스의 registerNode 방법, tree 등록 treeid를 실제 ID로 기록합니다.
Ext.override(Ext.tree.TreePanel,{
getNodeByTreeId : function(treeid){
return this.nodeHash[treeid];
},
registerNode : function(node){
this.nodeHash[node.attributes.treeid] = node;
},
unregisterNode : function(node){
delete this.nodeHash[node.attributes.treeid];
}
})
3단계: Ext.tree 다시 쓰기.TreeNode 클래스의 ensureVisible 방법으로 getNodeByTreeId를 treeid로 호출합니다.
Ext.override(Ext.tree.TreeNode,{
ensureVisible : function(callback){
var tree = this.getOwnerTree();
tree.expandPath(this.parentNode.getPath(), false, function(){
var node = tree.getNodeByTreeId(this.attributes.treeid); // Somehow if we don't do this, we lose changes that happened to node in the meantime
tree.getTreeEl().scrollChildIntoView(node.ui.anchor);
Ext.callback(callback);
}.createDelegate(this));
}
})
4단계: Ext.tree 다시 쓰기.TreeEventModel 클래스 getNode 메서드, getNodeByTreeId 메서드 조정
Ext.override(Ext.tree.TreeEventModel,{
getNode : function(e){
var t;
if(t = e.getTarget('.x-tree-node-el', 10)){
var id = Ext.fly(t, '_treeEvents').getAttributeNS('ext', 'tree-node-id');
if(id){
return this.tree.getNodeByTreeId(id);
}
}
return null;
}
})
다섯 번째 단계: Ext.tree를 다시 씁니다.TreeNodeUI 클래스, 저는 상속, renderElements 덮어쓰기 방법을 사용합니다. 주로 이 문장입니다.
6단계: 이 트리가 드래그를 지원한다면 Ext.tree를 다시 써야 합니다.Tree DropZone의 onNode Over.
덧붙이다
7단계: 새 노드를 만들 때 아래 (treeid)
이때, 업무에서 인용한 것은 여전히 node이다.id 속성
덧붙이다
onNodeOver : function(n, dd, e, data){
if(n.node == undefined){
return;
}
*****
}
7단계: 새 노드를 만들 때 아래 (treeid)
var attr = {
text: ' ',
type: node.attributes.type,
treeid: Ext.id(null, node.attributes.type),
uiProvider: BufTreeSpecUI
}
var n = new Ext.tree.TreeNode(attr);
이때, 업무에서 인용한 것은 여전히 node이다.id 속성
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Application Development in WebOSDevelop applications in WebOS Recognize the abstract class Application The operating system accepts classes that impleme...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.