plusieurs occurrences de boîtes de dialog jQuery sur des lignes de tableau dans les rails 3 – comment procéder?

La tâche que j’essaye d’accomplir:

J’ai une application Rails 3 qui traite les ordres de travail d’une entreprise de télécommunications. La page d’index du contrôleur des ordres de travail affiche les ordres de travail paginés en rangées allant jusqu’à 30 par page.

Le client aimerait pouvoir mettre à jour deux champs à partir de cette page. Ils sont technicien ETA et Work Order Status . J’ai écrit du code pour utiliser les fenêtres de dialog jQuery afin de servir des formulaires partiels (un pour chaque champ) pour la mise à jour.

Jusqu’à présent, j’ai pu obtenir les popups pour servir les partiels de formulaire, mais ils ne fonctionnent que pour la première rangée. Les liens pour les lignes suivantes de la page ne fonctionnent pas. Je suppose que cela est dû au fait que les div contenant les appels aux partiels doivent porter un nom unique pour chaque ligne (chaque ordre de travail dans ce cas).

Pour le moment, j’essaie seulement de résoudre le problème de la possibilité d’utiliser les itérations de fenêtres contextuelles de dialog pour chaque ligne au premier plan. C’est ce que j’ai pour le code actuellement:

les .js:

$(document).ready(function() { $('div#status-chg-form').dialog({ autoOpen: false }); $('#statuslink').click(function(){ $('div#status-chg-form').dialog('open'); }); }); $(document).ready(function() { $('div#eta-chg-form').dialog({ autoOpen: false }); $('#etalink').click(function(){ $('div#eta-chg-form').dialog('open'); }); }); 

les divs pour rendre les partiels (dans ma vue d’index):

 
'statusform' %>
'etaform' %>

et les liens (dans ma vue d’index):

  

(note: la variable status_display est remplie correctement)

      

Je pense que je peux utiliser l’identifiant de la ligne d’ordre de travail comme identifiant unique pour chaque occurrence de la boîte de dialog, mais je ne suis pas un codeur jQuery expérimenté et j’ai donc besoin d’un plus grand esprit pour me diriger vers le bonne direction.

Ok, alors j’ai une solution partielle à ce problème mais j’ai toujours quelques difficultés avec l’enquête.

Pour identifier de manière unique les div de la boîte de dialog et les liens correspondants, je l’ai fait:

Pour le statut:

  <% statusidname = "statuslink-" + work_order.id.to_s %> <%= link_to (status_display, "#", :id => statusidname, :onclick => "statusdialog('#{work_order.id.to_s}')") %> <% statusdivname = "status-chg-form-" + work_order.id.to_s %> <%= content_tag :div, :class => statusdivname, :style =>"display:none" do %> <%= render :partial => 'statusform' %> <% end %> 

et pour ETA:

  <% etaidname = "etalink-" + work_order.id.to_s %> <% if work_order.soft_completion_datetime.blank? %> <%= link_to ("No ETA Entered", "#", :id => etaidname, :onclick => "etadialog('#{work_order.id.to_s}')") %> <% else %> <%= link_to (work_order.soft_completion_datetime.strftime('%m/%d/%Y %I:%M %p'), "#", :id => etaidname, :onclick => "etadialog('#{work_order.id.to_s}')") %> <% end %> <% etadivname = "eta-chg-form-" + work_order.id.to_s %> <%= content_tag :div, :class => etadivname, :style =>"display:none" do %> <%= render :partial => 'etaform' %> <% end %> 

En résumé, essentiellement, ce code crée des liens nommés statuslink-999 et etalink-999 et des divs nommés status-chg-form-999 et eta-chg-form-999 où 999 est le work_order.id, nommant ainsi chaque lien et div de chaque rangée.

C’est mon .js. Cela ne fonctionne pas actuellement. Je ne peux pas comprendre ce que je ne fais pas exactement ici, mais le script ne reçoit pas le Rowid.

 $(function statusdialog(rowid) { $('div#status-chg-form-'+rowid).dialog({ autoOpen: false }); $('#statuslink-'+rowid).click(function(){ $('div#status-chg-form-'+rowid).dialog('open'); }); }); $(function etadialog(rowid) { $('div#eta-chg-form-'+rowid).dialog({ autoOpen: false }); $('#etalink-'+rowid).click(function(){ $('div#eta-chg-form-'+rowid).dialog('open'); }); });