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

时间:2010-11-16 19:26:26

标签: dojo

我有一个正在运行的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;}
}其他{
    contentSourceA.checkAcceptance = function(){return true;}
}
dojo.connect(contentSourceA, 'onDrop',函数(源,节点,复制){
    if(dojo.query(“#ContentCol”)[0] .children.length> 1){
        contentSourceA.checkAcceptance = function(){return false;}
    }其他{
        contentSourceA.checkAcceptance = function(){return true;}
    }
});

因此我的问题是:更改dojo.dnd.Source.checkAcceptance会影响类型检查功能吗?如果没有,我在这里做错了什么?我应该通过其中一个主题活动吗?

1 个答案:

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