2009-05-14 8 views
2

Après avoir fait un div draggable, je voudrais, lorsque le div est abandonné, transmettre au contrôleur la position div pour qu'il puisse être sauvegardé dans la base de données.Sauvegarde de la position d'un div draggable dans les rails

Ma première idée serait d'avoir une forme cachée dans le div, avec 2 champs de texte (un pour X et un pour Y) qui est maintenu à jour via javascript et soumis sur drop. Cependant, cela ressemble à un peu un hack et n'est pas une solution élégante. Est-ce que quelqu'un a déjà rencontré ça?

Merci.

+0

utilisez-vous un framework javascript ..? – andi

Répondre

2

J'allais aussi dire stocker les positions dans les champs de texte est une mauvaise idée. jQuery UI fournit draggable et est facilement utilisé. L'exemple ci-dessous envoie une requête ajax à chaque fois que l'élément est supprimé.

$('#draggable_element').draggable({ 
    stop: function(event, ui) { 
     $.post("http://example.com/some_action", 
      { top: ui.position["top"], left: ui.position["left"] }, 
      function() { 
       // callback stuff 
      } 
     ); 
    } 
}); 
+0

Merci, cela est également très utile. Comment pourrais-je écrire tout cela en utilisant erb dans les rails? – Stefano

+0

Vous n'écririez pas tout en utilisant erb. Dans l'un de vos modèles html.erb, vous auriez juste un div avec un ID ou une classe qui lui est assignée (correspondant à la fonction .draggable), puis dans un fichier javascript séparé (et inclus), vous auriez ce code dans le jQuery initialise la fonction. – danengle

3

Vous pouvez simplement utiliser une requête AJAX qui afficherait les valeurs X et Y dans votre application Rails en arrière-plan. Pas besoin de stocker les positions dans votre HTML.

Si vous utilisez jQuery, vous pouvez utiliser quelque chose comme ceci:

// Include this in an onDrop event handler: 
element = ... // dropped div 
url = "http://example.com/.../save_div_position/"; 
data = $(element).position(); 
success_callback = function(data, textStatus) { 
    // alert that new position is saved 
}; 
$.post(url, data, success_callback, "json"); 
+0

Merci - c'est très utile. Je me demandais comment cela pourrait se traduire par un code plus «rails-y». Dans les rails, j'utilise le prototype, mais peut également passer à jQuery – Stefano