jQuery UI Sortable-ошибка: не удается вызвать методы на sortable до инициализации; попытка вызвать метод "disable"



У меня есть сортируемый элемент списка jQuery UI, который заполняется динамически из запроса Ajax.



В настоящее время рабочий процесс идет




  1. пользователь нажимает кнопку, Список заполняется и сортируется по заданным настройкам.

  2. пользователь нажимает другую кнопку,

    1. существующие элементы списка <li> стираются вызовом jQuery.empty()

    2. новые значения данных вставляются в новые элементы списка <li> и добавляются в список <ul>

    3. сортируемый список обновляется через $("#сортируемый").сортируемый ("обновить");




Учитывая сортируемый объект списка $("#avail_list").sortable( ... );, я хочу, чтобы свойство определенных элементов списка draggable было отключено и непрозрачность была установлена на 0,5 на основе существующих значений в других элементах.



Для этого у меня есть следующая функция:



var disabled = [];
var appendString = ""
if (avail.length > 0) {
for (var i = 0; i < avail.length; i++) {

//check if current list element exists in existing value list. True results
//in grayed out and non-draggable element
compareMatch = checkMatch(avail[i], compare);

if (compareMatch)
disabled.push(list + "open_" + avail[i].id);


appendString += "<li id = "+ list + "open_" + avail[i].id +
" class = 'avail_list_element'><img class = 'logo' src = /static/images/vendor_logo/" + avail[i].icon + " /></li>"
}

$("#avail_list").append(appendString);

}

$("#avail_list").sortable("refresh");

if (disabled.length > 0)
disableDraggable(disabled);

function disableDraggable(elements){
for (var i = 0; i < elements.length; i++) {
console.log(elements[i])
$("#" + elements[i]).sortable("disable");
$("#" + elements[i]).fadeTo("fast", 0.5);
}
}


Однако это приводит к ошибке



Error: cannot call methods on sortable prior to initialization; 
attempted to call method 'disable'


Поскольку я вызвал refresh в сортируемом списке до отключения элементов, как можно не инициализировать объект sortable?

688   1  

1 ответ:

Вызов a .sortable () на любом элементе делает дочерние элементы этого элемента сортируемыми. Это не означает, что дети также инициализируются с помощью .сортируемый(). Они просто часть сортируемого контейнера,который можно перетаскивать.

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

Используйте отмените СВОЙСТВО , чтобы исключить эти элементы из сортировки. Добавьте эту опцию Везде, где вы инициализируете сортировку.

$("#avail_list").sortable({ 
    cancel: ".disable-sort" 
});

И добавьте этот класс к тем элементам, которые вы хотите отключить.

function disableDraggable(elements){
  for (var i = 0; i < elements.length; i++) {
    $("#" + elements[i]).addClass("disable-sort");
    $("#" + elements[i]).fadeTo("fast", 0.5);
  }
}

Comments

    Ничего не найдено.