dijit.Tree DnD из дерева в дерево - дочерние узлы не создаются в целевом дереве - PullRequest
2 голосов
/ 12 августа 2011

У меня есть два dijit.Trees: srcTree и trgTree.Я реализовал функцию trgTree.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;
},

1 Ответ

2 голосов
/ 06 сентября 2011

Мое сообщение получило переплетение ... потрясающе!:) Я нашел обходной путь, и вот он.

    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
        }
    }
},

Весь этот код с контекстом нахождения внутри одного класса, где находится этот класс (это проект WaveMaker, итак что класс - это wm.Page).Извините за отсутствие подробностей и документов по этому вопросу, но это хороший стартовый код.Если у вас есть конкретные вопросы по поводу моего обходного пути, просто спросите, и я постараюсь быть своевременным с ответом.

...