2010-04-18 15 views
11

nazywam sortable.stop() zrobić wywołanie ajax do przechowywania niektórych danych po operacji przeciągania & drop przywrócić.jQuery UI sortable: pozycję w oparciu o pewnym stanie

Kiedy wywołanie ajax zwraca błąd (błąd logiczny wniosek lub problem netto) Chcę przenieść przeciągany element w jego pierwotnej/start pozycji, w jaki sposób można to osiągnąć?

Scenariusz powinien być

  1. użytkownik przeciąga A do punktu B
  2. zdarzenie sortable.stop() nazywa, to wyzwala wywołanie AJAX
  3. wywołanie ajax zwraca błąd
  4. wewnątrz przypadku stop() my uzyskać błąd ajax
  5. przenieść A na pierwotną pozycję
  6. użytkownik ponownie przenieść A do B
  7. wszystko jest ok
  8. pozostaje w swojej nowej pozycji w B

Kroki 6-8 są pokazane w celu wyjaśnienia kolejną opór można zrobić i poprzedni błąd należy zapominać.

Odpowiedz

22

Wystarczy popatrzeć na .sortable('cancel'); coś takiego:

var list = $('#some-list') 
list.sortable(
{ 
    // Some options. 
    stop: function() 
    { 
     $.post('some-url', someData, function() 
     { 
      if (somethingWentWrong) 
      { 
       list.sortable('cancel'); 
      } 
     }); 
    } 
}); 
+5

Pod stop() callback nie działa więc użyłem odbierać() zamiast stop() i anulowane spadek z $ (ui.sender) .sortable ('anuluj'); – dafi

+0

to zadziałało dla mnie i uratowało mi pewne kłopoty. Nie musiałem używać kodu @dafi, ale cieszę się, że wiem to teraz! :) – CommentLuv

6

Dzięki Dafi - to działa na mnie:

$('#some-list').sortable({ 
    // other options here, 
    receive: function(event, ui) { 

    // ajax or function here 
    if(somethingWentWrong) { 
     $(this).sortable('cancel'); 
     $(ui.sender).sortable('cancel'); 
    } 

    } 

}); 

Nie jestem pewien, czy trzeba $(this).sortable('cancel');, ale ja figura to najlepiej, aby anulować źródło i docelowe listy do sortowania. W ten sposób pozycja na liście zostanie natychmiast przywrócona. Inne Sortowalne options tutaj.

0

Dzięki liveat60fps, jego drugi rachunek z nimi których tylko potrzebujesz.

$('#some-list').sortable({ 

     // other options here, 
    receive: function(event, ui) { 

    // ajax or function here 
    if(somethingWentWrong) { 
     $(this).sortable('cancel'); 
     $(ui.sender).sortable('cancel'); 
    }  
    }  
}); 

ten sposób w pewnym stanie, można revrt z powrotem do stanu orignal.

Powiązane problemy