Dojo:拖放停止拖动

时间:2010-05-18 16:32:46

标签: dojo drag-and-drop

我正在尝试使用Dojo dnd Source(1.4.2)来创建一个接口,我可以将一些对象从Source移动到Target。它工作正常,但我想改变行为以便在实际执行D& D之前执行检查,因此如果检查失败,则向用户显示错误消息,并且不进行D& D.我尝试过以下在博客中找到的示例:

 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为null。有人知道怎么做吗?

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
   }
 });