2010-01-16 44 views
3

我有兩個div嵌套在父div下,我希望所有這些都是dojo.dnd的源代碼以及目標。我們可以在Dojo中嵌套目標嗎?

我希望能夠添加節點到內容被刪除的div,並且還允許用戶在3個div之間移動它。

事情是這樣的 - http://www.upscale.utoronto.ca/test/dojo/tests/dnd/test_nested_drop_targets.html

這在舊版本的Dojo實現我客串,並沒有按」似乎與1.4

來工作,是嵌套目標的支持刪除?有什麼辦法可以做到這一點?

回答

1

當前不支持嵌套源/目標。在大多數情況下,您可以通過使用獨立的源/目標來解決此限制,但可以按照您的需要使用CSS進行定位。

+0

我試圖爲Dojo小部件構建一個DnD可視化編輯器。所以人們可以在視覺上構成用戶界面。所以只是把它們視覺上不會工作:( 我想能夠在div之間拖動組件,將div移入和移出div等 任何方式我們都可以實現這一點,我很自在地編寫一個自定義的DnD處理程序或使用DnD主題只需要正確的方向查找 – Rohit 2010-02-11 06:55:54

+0

首先確保您不能使用dojo.dnd.move&co。這些文件支持傳統風格拖動,並且他們不認爲容器是列表。缺點是你必須自己處理「drop」,這並不難 - 你可以使用dojo.dnd代碼作爲cheatsheet。 – 2010-02-15 20:42:43

1

我對這種情況使用了一種解決方法。我創建了另一個DIV元素,它位於嵌套目標的相同位置,具有相同的寬度和高度,但具有較高的Z-Index值。然後新的DIV元素覆蓋嵌套的目標。當用戶試圖放下嵌套的目標時,他實際上掉到了上面的新DIV元素。只要新的DIV元素沒有嵌套在父放置目標中,Dojo的dnd操作就可以正常工作。我通常把新的DIV元素作爲body元素的子元素。

你需要做的是在onDndStart中創建新的DIV並在onDndCancel中銷燬它,然後一切都應該正常工作。

0

Dojo版本1.10仍不支持嵌套的Dnd。

CSS定位和覆蓋div沒有爲我工作。但我注意到,將元素從dndContainer拖出到父級dndContainer中並不會觸發父級的onMouseOverEvent。

在有人還在使用Dojo和有同樣的問題時,這裏是我的方法來解決這個問題:

聲明自己dndSource例如nestedDndSource.js

define([ 
    "dojo/_base/declare", 
    "dojo/dnd/Source", 
    "dojo/dnd/Manager" 
], function(declare,dndSource, Manager){ 

    var Source = declare("dojo.dnd.Source", dndSource, { 
     parentSource: null, 
     onOutEvent: function(){ 
      if(this.parentSource != undefined) 
       Manager.manager().overSource(this.parentSource) 
      Source.superclass.onOutEvent.call(this); 
     } 
    }); 

    return Source; 
}) 

使用nestedDndSource爲孩子而不是道場,並確保提供父爲parentSource參數的dndSource:

var parentDndSource = new dojoDndSource(parentNode, {..}); 
var childDnDSource = new nestedDndSource(childNode,{ 
         parentSource: parentDndSource, 
         onDropExternal: ... 
        }); 

工作例如:https://jsfiddle.net/teano87/s4pe2jjz/1/

相關問題