2010-05-18 135 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 
    } 
});