2014-01-22 3 views
1

Она должна быть простым вопросомКендо перетаскиваемое - приостановить перетаскивание временно из обработчика события перетаскивания

Итак, у меня есть очень простой kendoDraggable:

grid.kendoDraggable({ 
     . . . 
     axis: "y", 
     hint: getHint, 
     drag: drag, 
     dragend: dragend, 
     dragstart: dragstart, 
    }); 

Мне нужно проверить мое состояние в «перетащить» обработчик и предотвратить перетаскивание, если условие истинно (поэтому невозможно выйти за пределы некоторой динамически рассчитанной границы). Но пользователь должен иметь возможность по-прежнему перетащить его в другое направление, если он не выпустил мышь, даже если он попытался перетащить за эту границу.

Если я пытаюсь остановить распространение события, он не работает:

function drag(e) { 
     if (e.clientY < someDynamicValue) { 
      e.preventDefault(); 
      e.stopImmediatePropagation(); 
      e.stopPropagation(); 
      return false; 
     } 

Но, если я просто бросить любое исключение, он работает так же, как я хочу его. Он не перетаскивается, если условие истинно, но перетаскивается, если условие ложно:

 function drag(e) { 
     if (e.clientY < someDynamicValue) { 
      throw "any exception"; 
     } 

Что происходит? Как действительно прекратить перетаскивание, если условие верно?

Спасибо!

P.S. Я знаю о «контейнере» свойства kendoDraggable, который ограничивает объект draggable, но он плохо работает со свитком.

ответ

1

Лучший способ ограничить операцию перетаскивания - это фильтрация с помощью селектора JQuery. Чтобы динамически сдержать перемещение, вы можете добавить/удалить классы из html-элементов асинхронно. В следующем примере пользователь может перетаскивать только строки сетки, но не может перетаскивать текущую ячейку, редактируемую. Надеюсь это поможет!

$("tbody").kendoDraggable({ 
    container: $("#Goals"), 
    filter: "tr td:not(.k-edit-cell)", 
    hint: (item) => this.dragHint(item), 
    drag: (e) => this.dragging(e) 
}); 
+0

Это довольно хорошая идея. Раньше я использовал контейнер для ограничения движения перетаскивания, и он работал плохо с NiceScroll. Кажется, я могу попытаться разрешить перетаскивание только над ячейками с определенным классом. Мне нужно попробовать, спасибо за это предложение! – Aremyst

Смежные вопросы