注意:這已解決,我會盡快在此發佈解決方案。Dojo擴展dojo.dnd.Source,移動不會發生。想法?
嘿,
好吧......我有一個最基本的要素一個簡單的道場頁面。三個UL和一些LI在其中。想法si允許它們之間的拖放,但如果由於最後一個項目被拖出而導致UL變空,我會向用戶發出一條消息,向他們發出一些指令。
爲了做到這一點,我想擴展dojo.dnd.Source dijit並添加一些智能。這似乎很容易。爲了保持簡單(我從CDN加載Dojo)我只是聲明我的擴展,而不是在模塊加載時完成。聲明功能在這裏...
function declare_mockupSmartDndUl(){
dojo.require("dojo.dnd.Source");
dojo.provide("mockup.SmartDndUl");
dojo.declare("mockup.SmartDndUl", dojo.dnd.Source, {
markupFactory: function(params, node){
//params._skipStartup = true;
return new mockup.SmartDndUl(node, params);
},
onDndDrop: function(source, nodes, copy){
console.debug('onDndDrop!');
if(this == source){
// reordering items
console.debug('moving items from us');
// DO SOMETHING HERE
}else{
// moving items to us
console.debug('moving items to us');
// DO SOMETHING HERE
}
console.debug('this = ' + this);
console.debug('source = ' + source);
console.debug('nodes = ' + nodes);
console.debug('copy = ' + copy);
return dojo.dnd.Source.prototype.onDndDrop.call(this, source, nodes, copy);
}
});
}
我有一個初始化函數中使用此裝飾列表...
dojo.addOnLoad(function(){
declare_mockupSmartDndUl();
if(dojo.byId('list1')){
//new mockup.SmartDndUl(dojo.byId('list1'));
new dojo.dnd.Source(dojo.byId('list1'));
}
if(dojo.byId('list2')){
new mockup.SmartDndUl(dojo.byId('list2'));
//new dojo.dnd.Source(dojo.byId('list2'));
}
if(dojo.byId('list3')){
new mockup.SmartDndUl(dojo.byId('list3'));
//new dojo.dnd.Source(dojo.byId('list3'));
}
});
它是儘可能去罰款,你會發現我將「list1」作爲標準dojo dnd來源進行測試。
問題是這樣的 - list1會高興地接受列表中的項目2 & 3誰將移動或複製爲apprriate。但是列表2會拒絕接受來自list1的項目。就好像DND操作被取消一樣,但是調試器確實顯示了dojo.dnd.Source.prototype.onDndDrop.call發生,並且參數看起來對我來說還好。
現在,這裏的文檔非常薄弱,所以我採取了一些這樣的例子可能會過時(我使用1.4)。
任何人都可以填寫我的擴展dijit可能是什麼問題?
謝謝!
謝謝,我欣賞信息 - 答案走向了一個不同的方向,我會在下面發表。 – 2010-06-10 07:37:00