2010-11-16 23 views
0

我有一個工作的DnD實現,但我遇到了一個障礙。看來,如果我將dojo.dnd.Source.checkAcceptance設置爲true,那麼Source容器就會停止檢查dndType,它會接受所有內容。將dojo.dnd.Source.checkAcceptance更改爲true會影響類型檢查嗎?

我正在檢查dojo.dnd.Source容器中是否存在節點,如果有我想禁用丟棄。我這樣做了兩次,因爲如果頁面加載時內容已經存在,我們希望禁止在那裏刪除附加內容,並且只允許源容器包含1個節點。同樣的onDrop事件。

如果checkAcceptance = false,那麼它工作並且不接受任何丟棄,但是如果checkAcceptance = true,那麼它接受一切。

我正在使用dojo版本1.4.2。

這裏是對侵犯性的代碼:
var contentSourceA = new dojo.dnd.Source(「ContentCol」,{accept:[「contentItem」]});
如果(dojo.query( 「#ContentCol」)[0] .children.length> 1){
contentSourceA.checkAcceptance =函數(){返回false;}
}否則{
contentSourceA.checkAcceptance =函數(){返回true;}
}
dojo.connect(contentSourceA, 'onDrop',函數(源,節點,複製){
如果(dojo.query( 「#ContentCol」)[0]。兒童。長度> 1){
contentSourceA.checkAcceptance = function(){return false;}
} else {
contentSource A.checkAcceptance = function(){return true;}
}
});

因此,我的問題:更改dojo.dnd.Source.checkAcceptance是否會影響類型檢查功能?如果不是,我在這裏做錯了什麼?我應該通過其中一個主題事件來做到這一點嗎?

回答

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); 
    } 
}); 
相關問題