Подтвердить что ты не робот

JQuery UI sortable - выполнять действия ПЕРЕД началом запуска пожаров

Я искал STACKOVERFLOW и другие форумы для решения моей проблемы - если я пропустил рабочее решение, пожалуйста, укажите мне его.

Моя проблема: Всякий раз, когда мы перетаскиваем элемент (портлет div) в моем отсортированном списке, мне нужно выполнить какое-то действие ПЕРЕД началом фактического процесса перетаскивания (из того, что я понимаю до запуска события START).

Чтобы быть более конкретным: Мои DIV предоставляют пользователю возможность расширять/сворачивать его тело (например, в примере на странице пользовательского интерфейса jquery http://jqueryui.com/demos/sortable/#portlets).

Всякий раз, когда мы перетаскиваем элемент, я хотел бы запустить мой метод коллапса, чтобы только перетаскиваемый визуальный элемент был свернутым DIV.

Однако всякий раз, когда я вызываю свой метод (что-то вроде этого)

$someitem.trigger("toggle.somenamespace") 

он работает так, как ожидалось, за исключением того, что ВЫСОТА перетаскиваемого помощника вычисляется до того, как начальное событие запускается в сортируемом, и поэтому помощник имеет высоту исходного элемента в его состоянии без сложения.

Моя первоначальная мысль об этом была: поскольку сортируемая, например, возможность измерять расстояние перетаскивания до начала фактической процедуры перетаскивания (с опцией: расстояние), это должно быть возможным втягивание в этот поток, например, сохранение исходной функции startDrag (или того, что она называется) сортируемого виджета во временном var, переопределить его с помощью специального обратного вызова, который сначала запускает мои функции сворачивания, а затем вызывает исходную функцию, чтобы гарантировать, что высота вычисляется правильно. Однако до сих пор у меня не было большого успеха в этом подходе...

Обратите внимание, что установка свойств CSS в обработчиках для перетаскивания или над событием сортировки не имеет желаемого эффекта, так как высота, которую сортируемый виджет, рассчитанный для помощника, задается как свойства элемента.

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

спасибо за любую помощь, Matthias

EDIT: Установка сортируемого флага: forceHelperSize в true и установка размера ui.item/helper в стартовом draghandler тоже не работает, так как это приводит к визуальному эффекту (только свернутый элемент перетаскивается, но останавливает элемент от перетаскивания (как если бы элемент все еще имел высоту в состоянии без сглаживания) проверено с помощью помощника: "original" и "clone"

4b9b3361

Ответ 1

Я долго искал это "решение":

$('.handle').each(function() {
    $(this).mousedown(function() {
        $(this).parent().parent().children('ol').hide('blind', 500);
    });
});

Вы можете инициировать событие путем mousedowning дескриптора и скрыть все, что вы хотите. Затем установите опцию delay sortable в значение, большее, чем продолжительность скрывающей анимации, в моем примере 501.

Это не изящное решение, но оно работает - по крайней мере, в моей программе.

Ответ 2

Вы можете сделать это, но это не перспектива для будущих версий jQuery UI:

var oldMouseStart = $.ui.sortable.prototype._mouseStart;
$.ui.sortable.prototype._mouseStart = function(event, overrideHandle, noActivation) {
   this._trigger("CustomBeforeStart", event, this._uiHash());
   oldMouseStart.apply(this, [event, overrideHandle, noActivation]);
};

Затем вы можете использовать новое событие при настройке сортируемого:

$(".whatever").sortable({
  "CustomBeforeStart":function(e, ui) {
  }
  ...
});