Сортируемые объекты Jquery Ajax-запрос отправка неправильных объектов - PullRequest
0 голосов
/ 28 января 2012

Я успешно реализовал JQuery Sortable. Я также могу записать это в базу данных, используя отдельный вызов. Однако это работает только для первого набора соответствующих классов, которые затрагиваются. Второе, и я полагаю, что последующие, если они были, не работают.

<ul class="grouped-articles-list">
      <li id="4weight10"></li>
      <li id="3weight20"></li>
      <li id="2weight30"></li>
</ul>

<ul class="grouped-articles-list>
      <li id="5weight50"></li>
      <li id="6weight60"></li>    
      <li id="22weight70"></li>
      <li id="18weight80"></li>     
</ul>

У меня есть несколько UL, которые имеют общий класс. Визуальная сторона все работает правильно, и они полностью сортируются. Затем я записываю объекты в массив Array = $ (". Grouped-article-list"). Sortable ('toArray') и затем вызываю функцию ajax. Если я делаю трассировку / console.log, он только возвращает объекты предыдущего (1-го) класса.

Можно ли использовать классы несколько раз, но при этом можно использовать массив ToArray? В этом случае, если бы я воздействовал на 2-й UL и выполнил трассировку, он все равно вернул бы ["4weight10", "3weight20", "2weight30"].

Я вставлю свой код ниже, но он немного многословен ...

function makeSortable(){
    var before;
    var weight; 
    var newWeight = [];
    var newID = [];

    $(".grouped-articles-list").sortable({
        tolerance: 'pointer',   
        items: "li:not(.sortable_disabled)",
        start: function(event, ui){
            newWeight.length = 0;
            var resultbefore = $(".grouped-articles-list").sortable('toArray');
            before = resultbefore;
            //goes through each item and saves their weight to an array
            $.each(before, function(i) { 
            newWeight.push(splitWeightFromId(before[i])[3]);               
            });
        },
        stop: function(event, ui) {
            newID.length = 0;
            var after = $(".grouped-articles-list").sortable('toArray');
            $.each(after, function(i) { 
            //goes through each item in the array and saves out their id  
            newID.push(splitWeightFromId(after[i])[1]);
            // Only adds changed items
            if (newID[i] !== splitWeightFromId(before[i])[1]){
            //as the items move, but the weights stay the same
            //sends the affected ID with the always stationary weight off
               change_weight( newID[i], newWeight[i] )
        }     
    });
});

Функция Ajax

function change_weight( link_id, new_weight ) { 
  $.ajax({
        type: "PUT",
        url:    "/article_relationships/" + link_id,
        data: {article_relationship : {
                                    weight : new_weight
                                    } },
        datatype: "js",
        remote: "true"
      });
}

Спасибо за ваше время,

Любые намеки, советы или предложения приветствуются.

1 Ответ

1 голос
/ 21 февраля 2012

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

sortableArray = ($('.grouped-articles-list'));
    $(sortableArray).each(function(index){
    $(sortableArray[index]).sortable({
        tolerance: 'pointer', 
        items: "li:not(.sortable_disabled)", 
        start: function(event, ui){ 
          newWeight.length = 0; var resultbefore = $(sortableArray[index]).sortable('toArray');
...