Dojo: перетаскивание Стоп Drag - PullRequest
1 голос
/ 18 мая 2010

Я пытаюсь использовать Dojo dnd Source (1.4.2) для создания интерфейса, в котором я могу перемещать некоторые объекты из источника в цель. Он работает нормально, но я хочу изменить поведение, чтобы выполнить проверку перед выполнением D & D, поэтому, если проверка не удалась, пользователю будет показано сообщение об ошибке, а D & D не будет выполнено. Я попробовал следующий пример, который нашел в блоге:

 dojo.subscribe("/dnd/drop", function(source,nodes,iscopy)
 { 
  if (nodes[0].id == 'docs_menu'){
   dojo.publish("/dnd/cancel");
   dojo.dnd.manager().stopDrag();
   alert("Drop is not permitted");
  }
  }
  );

Но он не может сказать, что this.avatar имеет значение null. Кто-нибудь знает, как это сделать?

Спасибо.

Jose

Ответы [ 2 ]

1 голос
/ 20 мая 2010

Правильный способ сделать такую ​​проверку - переопределить функцию checkAcceptance(source, nodes) в dojo.dnd.Source.

var target = dojo.dnd.Source(node, {
    checkAcceptance(source, nodes) : function() {
        if (nodes[0].id == 'docs_menu') {
            return false;
        }
        return this.inhertied(arguments);
    }
});

Подробнее см. документ .

0 голосов
/ 05 января 2016

Я столкнулся со случаем, когда у меня были ограничения на порядок пунктов в списке. Некоторые предметы должны были предшествовать другим. Невозможно выполнить проверку на этапе checkAcceptance, поскольку на этом этапе заказ не установлен. Я решил это следующим образом.

on(mySource, "Drop", function(source, nodes, copy){
   var invalid = false;
   // ... run the checks to see if the new order is valid
   // Keep the original order in a parameter named *data*   

   if(invalid == true) {
      mySource.selectAll();
      mySource.deleteSelectedNodes();
      mySource.insertNodes(false, data);
   }
   else
   {
      // Have the data added
   }
 }); 
...