2012-07-10 54 views
0

我正在使用Dojo dnd 1.7.2版,它一般工作得很好。我很高興。Dojo dnd(拖放)1.7.2 - 如何維護一個單獨的(非dojo-dnd)列表?

我的應用程序保持項目的許多陣列,並作爲用戶拖動和周圍滴項目,我需要確保我的陣列更新,以反映用戶正在觀看的內容。

爲了做到這一點,我想我需要到處跑的Source時間一些代碼。 onDndDrop

如果我使用dojo.connect在我的源代碼上設置處理程序onDndDroponDrop,我的代碼似乎太晚了。也就是說,傳遞給處理程序的source實際上並沒有其中的項目。

這是一個問題,因爲我想調用source.getItem(nodes[0].id)來獲取被拖動的實際數據,以便我可以在我的數組中找到它並更新這些數組以反映用戶正在進行的更改。

也許我要對此錯誤的;有更好的方法嗎?

回答

1

好吧,我找到了一個好辦法嗎 這個。一個提示在這個答案找到一個不同的問題: https://stackoverflow.com/a/1635554/573110

我的電話的成功序列基本上是:

var source = new dojo.dnd.Source(element, creationParams); 
var dropHandler = function(source,nodes,copy){ 
    var o = source.getItem(nodes[0].id); // 0 is cool here because singular:true. 
    // party on o.data ... 
    this.oldDrop(source,nodes,copy); 
} 
source.oldDrop = source.onDrop; 
source.onDrop = dropHandler; 

這可以確保onDropdropHandler)新實施前右以前叫安裝一個。

-1

Kind'a拍攝一張空白我想,還有dndSource幾個不同的實現。但是有一些事情需要了解在mouseover/dnddrop期間調用的事件/ checkfunctions。

一種方法是設置爲checkAcceptance(source, nodes)如果您有任何目標。然後保留當前拖動的節點的引用。獲取棘手,雖然有多個容器具有動態內容。

設置你的源代碼,而重寫checkAcceptance和使用已知的,(也許是全球)變量跟蹤。

var lastReference = null; 
var target = dojo.dnd.Source(node, { 
    checkAcceptance(source, nodes) : function() { 
     // this is called when 'nodes' are attempted dropped - on mouseover 
     lastReference = source.getItem(nodes[0].id) 
     // returning boolean here will either green-light or deny your drop 
     // use fallback (default) behavior like so: 
     return this.inhertied(arguments); 
    } 
}); 

最好的辦法可能就是這樣的 - 你得到兩個目標和源加上手頭的節點,但是你需要找出哪些是看在節點右邊堆我相信它在出版同時作爲事件(onDrop)您選擇使用媒體鏈接:

dojo.subscribe("/dnd/drop", function(source, nodes, copy, target) { 
    // figure out your source container id and target dropzone id 
    // do stuff with nodes 
    var itemId = nodes[0].id 
} 

可用機械/主題通過dojo.subscribe和活動在此列出 http://dojotoolkit.org/reference-guide/1.7/dojo/dnd.html#manager

+0

感謝您的回覆。我很感激幫助。 我不知道你的意思是「dndSource有幾個不同的實現」......你能澄清一下嗎?我正在使用Source.js中的一個。 .subscribe技術與我的問題中描述的問題相同。如果我的訂閱在內置之後被調用,則該項目已從源代碼中刪除。我不希望我的程序依賴於回調的順序。 – Harold 2012-07-11 18:06:27

+0

有一個特定於dijit.Tree的dnd api,這些dojox中的一些..它是dojo/dnd/Source嗎?無論哪種方式,實現一個dndSource.checkAcceptance(源,節點)然後 - 我填寫空白 – mschr 2012-07-12 21:53:26

+1

哦,沒有注意到你的答案如下:p – mschr 2012-07-12 22:02:07