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

问题描述 投票:0回答:1

我有一个可行的DnD实现,但是遇到了麻烦。看来,如果我将dojo.dnd.Source.checkAcceptance设置为true,那么我执行的Source容器将停止检查dndType,它将接受所有内容。

我正在检查dojo.dnd.Source容器中是否存在节点,如果要禁用删除。我这样做两次,因为如果页面加载时内容已经存在,我们要禁止在其中添加其他内容,而只允许Source容器包含1个节点。同样对于onDrop事件。

如果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是否会影响类型检查功能?如果没有,我在这里做错了什么?我应该通过主题事件之一来执行此操作吗?

dojo
1个回答
1
投票

类型检查逻辑封装在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);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.