2011-08-11 6 views
2

두 개의 dijit.Trees가 있습니다. srcTree 및 trgTree. trgTree.itemCreator 함수를 구현했으며 삭제 된 노드가 대상 노드/트리에 제대로 만들어졌지만 삭제 된 노드의 자식 노드가 만들어지지 않았습니다. 나는 이들을 만들기 위해 많은 순열을 시도했지만 아무것도 효과가없는 것 같다.dijit.Tree 트리에서 트리로 DnD - 자식 노드가 대상 트리에서 생성되지 않음

제가 누락 된 부분에 대한 통찰력. 여기에 내 itemCreator 코드가 있습니다 :

trgTreeItemCreator: function(/*DomNode[]*/ nodes, target, /*dojo.dnd.Source*/ source) { 
    console.info("*** start newTreeItemCreator"); 
    var tmp = dijit.getEnclosingWidget(nodes[0]); 

    var kids = dojo.map(tmp.item.items, function(kid){ 
     return { 
      "id": kid.id, 
      "name": [kid.name[0]], 
      "type": [kid.type[0]] 
     }; 
    }); 

    var newItems = [{id:nodes[0].id, name:[tmp.label], type:[tmp.item.type[0]], items:kids}]; 
    return newItems; 
}, 

답변

2

내 게시물 tumblweed ... awesome! :) 해결 방법을 알아 냈습니다. 여기 있습니다. 이 클래스는 (이것이 WAVEMAKER 프로젝트이기 때문에 클래스가 wm.Page 임)이고

var that = this; 
    this.trgTree = 
     new dijit.Tree({ 
      model: this.trgTreeModel, 
      dndController: "dijit.tree.dndSource", 
      checkAcceptance: this.treeCheckAcceptance, 
      checkItemAcceptance: this.trgTreeCheckItemAcceptance, 
      getIconClass: app.getIcon, 
      onDndDrop: function(source, nodes, copy) { 
      that.handleDrop(that, dijit.getEnclosingWidget(
       nodes[0]).item, this.current.item); 
      that.srcStore.save(); 
      that.trgStore.save(); 
     } 
    }, "trgTree"); 

    handleDrop: function(inPage, inSrcItem, inTrgItem) { 
     console.info("*** start addItem: srcItem: " + inSrcItem.name[0]); 
     var srcType = inSrcItem.type[0]; 
     var kids = inSrcItem.items; 

     if (inTrgItem.type != "fooType") { 
      // do something unique for fooType node targets 
     } 

    // add the item to the tree 
    inPage.addItem(inPage, inSrcItem, inTrgItem); 
} 

addItem: function(inPage, inSrcItem, inTrgItem) { 
    var srcType = inSrcItem.type[0]; 
    var trgType = inTrgItem.type[0]; 

    var theName = inSrcItem.name[0]; 

    if (srcType == "fooType") { 
     srcType = inSrcItem.txType[0]; 
    } 

    var newItem = { 
     id: inSrcItem.id[0], 
     name: theName, 
     type: srcType, 
     items: [] 
    }; 


    newItem = inPage.trgStore.newItem(newItem); 
    inPage.trgTreeModel.pasteItem(newItem, null, inTrgItem, false, 0); 

    var kids = inSrcItem.items; 
    if (kids !== undefined) { 
     // call recursively to add child items 
     for (var i in kids) { 
      inPage.addItem(inPage, kids[i], newItem); 
      // TODO: expand the node after it is added 
     } 
    } 
}, 

이 코드들은 모두 하나의 클래스의 내부가되는 상황에있다. 세부 정보 및 문서가 부족하여 죄송합니다.하지만 좋은 시작 코드입니다. 내 해결 방법에 대해 특정 질문이있는 경우 질문하면 답변을시기 적절하게 시도합니다.

+0

WaveMaker 포럼 [여기] (http://dev.wavemaker.com/forums/?q=node/6219)에서이 작업을 수행하는 방법에 대한 좋은 글이 있습니다. –

관련 문제