УВЕДОМЛЕНИЕ: ЭТО РЕШЕНО, Я ИЗУЧАЮ РЕШЕНИЕ ЗДЕСЬ КАК МОЖНО СКОРЕЕ.
Привет всем,
Хорошо ... У меня есть простая страница додзё с базовыми элементами. Три UL с некоторыми LI в них. Идея заключается в том, чтобы разрешить перетаскивание между ними, но если какой-либо UL станет пустым из-за перетаскивания последнего элемента, я отправлю пользователю сообщение с инструкциями.
Чтобы сделать это, я хотел расширить dijit dojo.dnd.Source и добавить немного интеллекта. Это казалось достаточно легким. Для простоты (я загружаю Dojo из CDN) я просто объявляю свое расширение вместо полной загрузки модуля. Функция объявления здесь ...
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);
}
});
}
У меня есть функция init, чтобы использовать это для украшения списков ...
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, которые будут перемещаться или копироваться как назначенные. Однако списки 2 и 3 отказываются принимать элементы из списка1. Это как если бы операция DND отменялась, но отладчик показывает, что происходит dojo.dnd.Source.prototype.onDndDrop.call, а параметры действительно выглядят нормально для меня.
Теперь документация здесь очень слабая, поэтому пример, из которого я взял кое-что из этого, может быть устаревшим (я использую 1.4).
Может кто-нибудь сообщить мне, в чем может быть проблема с моим расширением dijit?
Спасибо!