1

我有这个相当长的 pre-AMD 代码,它从dojo.data.ItemFileWriteStore. 它通常工作正常,但我尝试通过 DnD 实现树节点的复制,但我不确定该过程。

目前,如果我在拖动时按住 Ctrl 将树项目复制到不同的位置,则生成的项目似乎是 100% 相同的项目。含义:如果我然后单击其中任何一个并调用其删除,则两者都会从树中删除。这是点击事件处理程序调用的删除代码:

var item = tree.selectedItem;
var yes = confirm('you sure?');
if (yes) {
    var xhrArgs = {
        url:"path/to/xhr.php",
        handleAs:"text",
        preventCache:true,
        content:{
            action:"delete",
            obj:item.name[0],
            pages_id:item.pages_id[0]
        },
        load:function (content, request) {
            if (request.xhr.status == 200)
                store.deleteItem(item);
        }
    };
    dojo.xhrPost(xhrArgs);
}

pasteItem当树模型的( dijit.tree.ForestStoreModel) XHR 回调返回时,我有什么特别需要做的吗?现在我没有对树做任何事情,因为我希望树不会将自己置于无效状态(重复节点)。

dojo.connect(treeModel, 'pasteItem', function(draggedItem, oldParentItem, newParentItem, is_copy, insertIndex) {
    var pageID=draggedItem.pages_id, newParentID=newParentItem.pages_id, 
        pages= dojo.filter(newParentItem.children, function (item) {
            return (item.name != 'element');
        }), content={
            action: "move",
            parent: newParentID,
            pages_id: pageID
        };
    content.obj = 'element';
    content.elements_id = draggedItem.elements_id;
    content.is_copy=is_copy;
    content.pos= insertIndex;

    var xhrArgs = {
        url:"path/to/xhr.php",
        handleAs:"json",
        content:content,
        load: function(result, request){
            draggedItem.pages_id = newParentID;
            // do I need to do something else here?
        },
        error:function (ret) { console.error(ret); }
    };
    dojo.xhrPost(xhrArgs);
});
4

0 回答 0