2010-04-18 7 views
11

J'appelle sortable.stop() pour effectuer un appel ajax pour stocker des données après avoir fait glisser & opération de suppression.JQuery UI sortable: position de restauration basée sur une condition

Lorsque l'appel ajax renvoie une erreur (erreur de logique d'application ou problème réseau), je veux déplacer l'élément déplacé vers sa position d'origine/de départ, comment puis-je l'atteindre?

Le scénario devrait être

    utilisateur
  1. traîne A à B
  2. l'événement sortable.stop() est appelé, il déclenche un appel ajax
  3. l'appel ajax renvoie une erreur
  4. dans l'événement stop() nous obtenir l'erreur ajax
  5. déplacer A à sa position d'origine
  6. l'utilisateur déplace à nouveau A à B
  7. tout est ok
  8. A reste dans sa nouvelle position dans B

étapes 6-8 sont présentées pour clarifier une traînée successive peut être fait et erreur précédente doit être oublié.

Répondre

22

Jetez un oeil à .sortable('cancel'); quelque chose comme ceci:

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

Sous le rappel de stop() cela ne fonctionne pas, j'ai donc utilisé receive() au lieu de stop() et supprimé avec $ (ui.sender) .sortable ('cancel'); – dafi

+0

cela a fonctionné pour moi et m'a sauvé quelques tracas. Je n'ai pas besoin d'utiliser le code @dafi mais je suis content de le savoir maintenant! :) – CommentLuv

6

Merci à dafi - cela fonctionne pour moi:

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

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

    } 

}); 

Je ne suis pas sûr si vous avez besoin $(this).sortable('cancel');, mais je comprendre qu'il est préférable d'annuler la source et les listes triées de destination. De cette façon, l'élément de liste revient immédiatement. Autre Sortable options ici.

0

Merci, liveat60fps, c'est la deuxième déclaration sur les deux dont vous avez seulement besoin.

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

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

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

De cette façon, dans certaines conditions, vous pouvez revenir à l'état initial.

Questions connexes