2011-03-03 98 views
1

我已查看了this link以獲取有關dojo拖放功能的教程。但有一點我注意到,在所有例子中,被拖動的項目總是一個簡單的項目,只是一個字符串對象...dojo.dnd.Source對象是否可以包含另一個dojo.dnd.Source對象作爲其中一個子節點?

我需要創建類似項目組的東西,你可以將項目拖放到項目組中以追加到組中,並將項目組作爲一個整體拖動。

因此我的問題是否可以將dojo.dnd.Source項目拖放到另一個dojo.dnd.Source項目中?

回答

2

簡答:沒有。許多人試圖修補它,但發現越來越多的非工作邊緣案例,所以這些修補程序從未成爲Dojo的正確之物。

如果您確實需要顯示和操作分層數據,請考慮Tree Dijit。

+0

我明白了。感謝您的信息。樹dijit似乎足夠做我需要的東西。 – Hery 2011-03-14 02:11:23

0

問題是,當你開始拖動並拖動子容器的源時,一切都會搞砸。 (不完全確定如何)。你可以做的是隱藏這些孩子的來源,使他們的overSource事件永遠不會觸發:

1)覆蓋Source.js中的checkAcceptance函數。只是添加了if(!flag) return false;如下:

if(!flag){ 
    /** 
    * Main Source 
    * - Group 1 
    * -- Child 1 
    * -- Child 2 
    * - Group 2 
    */ 
    var node = dojo.byId(this.node);  
// If the node being moved is the source, skip, but don't hide from view. 
if('#'+dojo.attr(source.node, 'id') != '#'+dojo.attr(node, 'id')){ 
    // If the node being moved is an immediate child of the container, you can move it. 
    if(dojo.query('#'+dojo.attr(source.node, 'id') + '>#'+dojo.attr(node, 'id')).length) { 
     return true;     
    } 

    // If this source is not a parent of the element, hide it. 
    if(dojo.query('#'+dojo.attr(node, 'id') + ' #'+dojo.attr(source.node, 'id')).length == 0) 
     dojo.addClass(node, 'hiddenSource');     
    } 
    return false; 
} 

2)您還需要添加以下彷彿(this.isDragging)中的OnMouseMove(重要)

var node = dojo.byId(this.node); 

    // If this is immeditae child, drop it. 
    if(dojo.query('#'+dojo.attr(m.source.node, 'id') + '>#'+dojo.attr(node, 'id')).length){ 
     m.canDrop(true); 
      return; 
    } 

3)長期在第一線onDndDrop刪除添加的類以重新顯示隱藏的元素。

onDndDrop: function(source, nodes, copy, target) 
{ 
    this.inherited(arguments); 
    dojo.forEach(dojo.query('.hiddenSource'), 
     function(el){dojo.removeClass(el, 'hiddenSource');} 
    ); 
} 

4)擴展onDndCancel做上述

onDndCanel: function() 
{ 
    this.inherited(arguments); 
    dojo.forEach(dojo.query('.hiddenSource'), 
     function(el){dojo.removeClass(el, 'hiddenSource');} 
    ); 
} 

這不是最好的解決方案,因爲它隱藏不能與要定位的當前元素被使用的元素,但它爲我工作。

相關問題