2010-08-20 11 views
0

Je voudrais avoir mon application Sinatra inclure une feuille de style spécifique vue dans la mise en page.Voir les feuilles de style spécifiques dans Sinatra (par la convention de nommage)

Tenir compte de cette application simple:

app_folder_root/ 
| my_app/ 
| my_app.rb 
| public/ 
| css/ 
|  index.css 
|  layout.css 
| views/ 
| index.haml 
| layout.haml 
config.ru 

config.ru:

require 'rubygems' 
require './my_app/my_app' 

map '/' do 
    run MyApp 
end 

app.rb:

require 'sinatra/base' 

class MyApp < Sinatra::Base 
    get '/' do 
    haml :index 
    end 
end 

J'ai essayé de définir une variable my_app.rb qui définit le nom de la vue et essayé de le référencer dans layout.haml, mais cela n'a pas fonctionné (je ne serais probablement pas Je suis allé avec cela comme une solution finale au problème car je sentais que c'était une odeur de code, mais essayait juste différentes possibilités).

est d'utiliser Haml, mais j'espère que est hors de propos - pensant que ce devrait être la même pour erb, etc.

En layout.haml, je voudrais faire référence à la vue qui sera rendue et inclure une vue feuille de style spécifique par une convention de nommage. Par exemple, si index.haml va rendre, je voudrais inclure css/index.css. Quelle est la meilleure façon de faire cela?

Répondre

1

Je résolu ce problème en procédant comme suit:

En index.haml (en haut), j'ai créé ou apposé un tableau nommé views:

- @views = Array.new unless defined? @views 
- @views << 'index' 

En layout.haml je référence @views:

%head 
    - @views.each do |view| 
    - haml_tag :link, {:rel => 'stylesheet', :type => 'text/css', :href => "css/#{view}.css"} 

Je suis un peu déçu de devoir vérifier @views dans la vue de faire sûr qu'il est défini avant de s'y ajouter, mais pour l'instant, il est gérable.

EDIT: Résolu le problème de devoir vérifier si @views est défini dans chaque vue. Dans config.ru ajouter ce qui suit:

before do 
    @views = Array.new 
end 

Je peux maintenant supprimer cette ligne de la vue:

- @views = Array.new unless defined? @views