Я создаю календарь перетаскивания и обнаружил, что сортируемый пользовательский интерфейс jQuery предлагает наилучшую живую производительность для того, что я пытаюсь сделать.
Тем не менее, применение сортировки к многим месяцам (от 60 до 180 дней за раз, иногда больше) приводит к заметному отставанию при загрузке страницы, поскольку мой сценарий применяет все эти сортируемые экземпляры. Он отлично работает после загрузки, но я бы предпочел не иметь начального лага. В некоторых случаях браузер даже пытается убить скрипт.
Я попытался сделать первый день календаря сортируемым, а затем использовать jcluer .clone () для копирования во все остальные дни, но, к сожалению, jcluery .clone () не копирует события .sortable. Другие события (такие как щелчок, двойной щелчок и т. Д.) Копируются нормально, но не сортируются. Проведя какое-то исследование в Интернете, я смог лишь найти утверждение, что jQuery «не поддерживает клонирование плагинов».
Есть ли лучший способ сделать это? Я просмотрел stackoverflow, форумы пользовательского интерфейса jQuery и Google в целом и ничего не нашел.
Заранее спасибо,
Хамон
РЕДАКТИРОВАТЬ: Вот код. Ничего особенного.
function sortableStop(event, ui) {
// Saves to the DB here. Code removed - not relevant
}
$(".milestone-day").bind("dblclick", function(ev) {
// Allows adding milestones. Code removed - not relevant
}).sortable({
handle: '.handle',
connectWith: '.milestone-day',
items: '.milestone',
stop: sortableStop
});
Разметка выглядит так:
<table>
<tbody>
<tr>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
</tr>
<tr>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
<td><ul class="milestone-day"></ul></td>
</tr>
...
</tbody>
</table>
Вехи - это элементы li, загруженные в соответствующие им дни вехи через ajax.
РЕДАКТИРОВАТЬ 2: Рабочая демонстрация размещена:
http://www.clearsightstudio.com/demos/calendar-load/
РЕДАКТИРОВАТЬ 3: Демо ушел. К сожалению.
Обратите внимание, что при открытии страницы возникает задержка. В моем реальном приложении происходит гораздо больше, чем в этой демонстрации, поэтому отставание еще более заметно.