2010-03-17 1 views
1

Aidez-moi à comprendre cela; J'apprends Sinatra (et Rails d'ailleurs, euh, et Ruby).Aidez-moi à comprendre les mises en page dynamiques dans Sinatra

Dites que je fais une application de recherche. Le formulaire de recherche est présenté dans un div, et les résultats seront présentés dans un autre. Le formulaire de recherche est rendu dans la div par une vue précédente (peut-être à partir d'un formulaire de connexion).

Je souhaite traiter les paramètres de formulaire, effectuer la recherche et afficher les résultats dans la div de résultats.

Si j'ai un "rendement" unique dans la mise en page et restitue les divs à partir de différentes vues, les résultats div effacent le div de recherche quand il rend. Si je définis les divs dans la mise en page par défaut, alors il suffit de rendre le contenu, évidemment la mise en page sera foiré: il devrait y avoir deux "rendements" et je ne pense pas que Sinatra supporte le passage des blocs aux rendements .

J'ai essayé sinatra-content-for plugin de foca, et cela semble plus proche de ce dont j'ai besoin. Mais je ne peux pas savoir où placer les instructions "yield_content".

Si j'ai cette haml dans ma mise en page:

#search 
    -# search form 
    = yield_content :search 
#results 
    -# search results 
    = yield_content :results 

... ce à mon avis de recherche:

- content_for :search do 
%form{:method => "post"... etc. 

... et cela dans la vue des résultats:

- content_for :results do 
%table{:class => 'results'... etc. 

Ce genre de travaux, mais quand je rends la vue des résultats, le div de recherche est vidé. Je voudrais qu'il reste. Est-ce que je fais quelque chose de mal? Comment dois-je mettre cela en place?

+0

Comment Rendez-vous la vue des résultats? Ajax, rafraîchir la page? – Beffa

Répondre

1

Je pense que vous voulez dire que vous voulez TOUJOURS montrer 2 divs, mais dans une nouvelle recherche, ils devraient être vides et sur une page de résultats, ils devraient être remplis. Vous pouvez probablement vous en sortir avec/un modèle de haml et remplir juste diff'tly sur la méthode de requête:

get "/search" do 
    # render haml 
end 

post "/search" do 
    # set instance variables: @search & @results 
    # run search 
    # render haml 
end 

(Désolé, ce pseudo est ... pas un véritable ordinateur.)

+0

Merci. Ya je l'ai compris finalement :-) – thermans

Questions connexes