将dojo.dnd.Source.checkAcceptance更改为true会影响类型检查吗?

x7rlezfr  于 2022-12-16  发布在  Dojo
关注(0)|答案(1)|浏览(130)

我已经有了一个可以工作的DnD实现,但是我遇到了一个障碍。看起来如果我设置dojo.dnd.Source.checkAcceptance为true,那么我所做的Source容器将停止检查dndType,它会接受所有内容。
我在检查dojo.dnd中是否存在一个节点。Source容器,如果有,我想禁用删除。我这样做两次,因为如果页面加载时内容已经存在,我们想禁用删除额外的内容,只允许Source容器包含1个节点。
如果checkAcceptance = false,那么它工作并且不接受任何丢弃,但是如果checkAcceptance = true,那么它接受所有丢弃。
我使用的是dojo 1.4.2版。
下面是违规代码:

var contentSourceA = new dojo.dnd.Source("ContentCol",{accept: ["contentItem"]});  
if (dojo.query("#ContentCol")[0].children.length > 1) {  
    contentSourceA.checkAcceptance = function(){return false;}  
}else{  
    contentSourceA.checkAcceptance = function(){return true;}  
}  
dojo.connect(contentSourceA,'onDrop',function(source,node,copy){  
    if (dojo.query("#ContentCol")[0].children.length > 1) {  
        contentSourceA.checkAcceptance = function(){return false;}  
    }else{  
        contentSourceA.checkAcceptance = function(){return true;}  
    }  
});

所以我的问题是:修改dojo.dnd.Source.checkAcceptance会影响类型检查功能吗?如果没有,我做错了什么?我应该通过一个主题事件来做吗?

ffvjumwh

ffvjumwh1#

类型检查逻辑封装在dojo.dnd.Source.checkAcceptance函数的默认实现中。如果重写此函数,默认逻辑将丢失。
您可以通过继承dojo.dnd.Source创建自己的DnD源类:

dojo.declare("AcceptOneItemSource", dojo.dnd.Source, {
    checkAcceptance : function(source, nodes) {
       if (this.node.children.length > 1) {
           return false;
       }
       return this.inherited(arguments);
    }
});

相关问题