Rails 3.2 Modal popup sur l'action
Aucune des questions sur ce forum semblent répondre à mon besoin spécifique. En gros, j'ai un bouton "Détails". Je veux que quand on clique, une boîte de dialogue modale s'affiche avec les renseignements tirés de l'émission.html.erb du modèle.
J'ai un livre.rb modèle. Dans la page d'index j'ai:
<div class="detail_button"><%= link_to "Details", book %></div>
Cliquant sur ce bouton, normalement me faudrait pour le livre/l'id de la page, à l'aide de l'action show. Mais je ne veux pas quitter la page, mais je veux un modal popup qui peut être fermé. J'ai essayé tous les jquery et javascript code sur des sujets connexes dans ce forum, mais aucune ne semble faire l'affaire. La plupart semblent être adressée à seulement créer ou des actions personnalisées.
Juste pour éviter toute répète, j'ai essayé le suivant, aucun n'a fonctionné:
Ce:
You could look at modal dialogs by www.jqueryui.com. Add jquery ui to your application.
Put a hidden div (display:none) in your layout page.
<div class="modal" style="display:none;">
</div>
Your link should be an ajax link:
<%= link_to 'Link', events_path(@event), :remote => true %>
Your controller should accept ajax response:
def show
@event = Event.find(params[:id])
respond_to do |format|
format.js
end
end
This is where the magic happens. After pressing the link via ajax, your show.js file will insert content into your empty hidden div and display the popup. Your views should have a javascript file: /view/events/show.js.erb
$('.modal').html(<%= escape_javascript(render(@event)) %>); //inserts content into your empty div.
$('.modal').dialog(); //jquery ui will open it as a modal popup
Ce:
$('a[data-popup]').live('click', function(e) {
window.open($(this).attr('href'));
e.preventDefault();
});
Et ce:
$('a[data-popup]').live('click', function(e) { window.open($(this).attr('href')); e.preventDefault(); });
= link_to( 'Create a new company', new_company_path, 'data-popup' => true )
Toute aide, les gars? Total noob ici.
OriginalL'auteur muyiwamat | 2013-05-08
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr de savoir comment @événements se rapporte à votre modèle de Carnet, mais en supposant que nous allons juste hors d'un seul modèle (Livre), c'est un moyen de votre code pourrait être mis en place:
app/views/livres/index.html.erb
Où vous itérer @livres et inclure le lien "Afficher les Détails", avec la télécommande: true set pour activer AJAX.
Sur cette page, vous devez également rendre votre modal/boîte de dialogue, mais il devrait avoir une classe sur qui le garde caché (vous aurez plus tard à bascule de cette avec JS/jQuery). J'ai utilisé un partiel pour garder le code plus modulaire, mais vous pourriez mettre juste le modal divs directement au-dessous.
app/views/layouts/_modal.html.erb
Partielle avec la structure du modèle. J'ai utilisé Twitter Bootstrap version, qui a prédéfinis style ainsi que quelques belles animation se déclenche.
app/controllers/books_controller.rb
Si votre contrôleur est configuré avec le standard de l'échafaudage, vous n'aurez qu'à ajouter format.js pour le bloc respond_to de l'action show. Cela entraîne automatiquement un fichier nommé show.js.erb (qui vous devez créer manuellement) lorsque l'action est déclenchée.
app/views/livres/montrer.js.erb
Comme vous l'avez justement dit, c'est là que la magie opère et l'AJAX réponse est envoyée à votre page. À l'aide de jQuery, je suis certaines variables et de remplacer le code HTML dans la lightbox modèle avec celui rendu par @livre (qui vient d'un partiel, vous devez créer nommé _book.html.erb).
app/views/_book.html.erb
C'est l'endroit où vous créez le modèle de ce qui se passe à l'intérieur de l'modal sur le succès de la réponse AJAX.
J'ai créé un exemple de la Librairie de l'application l'aide de ce code sur Github. Espérons que cette aide.
Tutoriel étonnante. Merci beaucoup!
Merveilleux exemple. Je vous remercie.
Bonjour j'ai essayé votre code. J'ai des "Disparus modèle livres/spectacle". En effet, le modèle d'émission est aujourd'hui une partielle. Il semble que l'application ignorer la js rendu dans mon contrôleur.
Je reçois un message d'erreur "Une erreur s'est produite lors de l'installation du json (1.8.0), et Bundler ne peut pas continuer." "bundle install" de teh téléchargé projet git.
OriginalL'auteur Web Guy Ian
".vivre" est obsolète dans jQuery. Avez-vous essayer de remplacer
par
Acclamations
Je suis désolé, mauvais copier/coller... je modifier ma réponse (remplacer .live par .sur)
OriginalL'auteur phron