2010-11-14 7 views
4

I ont un modèle de mise en application avec:rails - Disposition content_for manutention avec AJAX

<%= yield(:railed) %> 

Pour gérer le contact dans le rail droit (colonne de droite de 300 x). Dans la page DEF SHOW actualy J'utilise:

<%- content_for(:railed) do -%> 
HTML STUFF goes here 
<%- end -%> 

La question que je vais avoir est maintenant que pour un de mes contrôleurs, Im en utilisant AJAX pour frapper DEF Show, et injecter le contenu dans la page. Ce travail est attendu car il n'obtient pas le contenu injurieux car le modèle de mise en page n'est pas utilisé dans la réponse format.js.

Donc, ce qui est un moyen intelligent, je peux obtenir l'affichage contet railed avec la demande AJAX, et ne pas avoir à écrire sur des pages séparées pour AJAX & Non-AJAX (URL directe).

Pensées? Je sais que certains génie Rails a compris cela déjà :)

Mon contrôleur:

def show 
    @thing = Thing.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.js 
    end 
    end 

show.js.erb:

<%= render :partial =>"thing/show" %> 

Répondre

1

Il est un peu un hack, mais voilà comment je l'a fait dans des rails 3.1 avec haml et jquery:

show.html.haml:

- if request.xhr? 
    #content_for_sidebar.hidden 
    [email protected]_flow.get(:sidebar) 

ajax_callbacks.js:

$("#nav a[data-remote]").live('ajax:complete', function(status, xhr) { 
    $($(this).attr('rel')).html(xhr.responseText); 
    $('#sidebar').html($("#content_for_sidebar").html()); 
    $("#content_for_sidebar").remove(); 
});