2010-05-18 140 views
1

我試圖使用Dojo dnd Source(1.4.2)來創建一個接口,我可以將某些對象從源移動到目標。它工作正常,但我想在實際執行D之前更改行爲以執行檢查,因此如果檢查失敗,則會向用戶顯示錯誤消息,並且不會生成D & D。我嘗試了以下在博客中找到的示例:Dojo:拖放停止拖動

dojo.subscribe("/dnd/drop", function(source,nodes,iscopy) 
{ 
    if (nodes[0].id == 'docs_menu'){ 
    dojo.publish("/dnd/cancel"); 
    dojo.dnd.manager().stopDrag(); 
    alert("Drop is not permitted"); 
    } 
    } 
); 

但它失敗,說this.avatar爲空。有人知道怎麼做這個嗎?

謝謝。

何塞

回答

1

做這種檢查的正確方法是重寫checkAcceptance(source, nodes)功能dojo.dnd.Source

var target = dojo.dnd.Source(node, { 
    checkAcceptance(source, nodes) : function() { 
     if (nodes[0].id == 'docs_menu') { 
      return false; 
     } 
     return this.inhertied(arguments); 
    } 
}); 

有關更多詳細信息,請參閱doc

0

我遇到了一個我對列表中的項目順序有限制的情況。有些項目必須先於其他項目。由於在該階段未設置訂單,因此無法在checkAcceptance階段進行檢查。我通過以下方式解決了這個問題

on(mySource, "Drop", function(source, nodes, copy){ 
    var invalid = false; 
    // ... run the checks to see if the new order is valid 
    // Keep the original order in a parameter named *data* 

    if(invalid == true) { 
     mySource.selectAll(); 
     mySource.deleteSelectedNodes(); 
     mySource.insertNodes(false, data); 
    } 
    else 
    { 
     // Have the data added 
    } 
});