Просмотр конкретных таблиц стилей в Синатре (по соглашению об именах) - PullRequest
0 голосов
/ 20 августа 2010

Я бы хотел, чтобы мое приложение Sinatra включало в макет таблицу с конкретными видами.

Рассмотрим это простое приложение:

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

Я попытался установить переменную в my_app.rb, которая задает имя представления, и попытался сослаться на него в layout.haml, но это не сработало (возможно, яЯ бы не стал воспринимать это как окончательное решение проблемы, так как я чувствовал, что это запах кода, но просто пробовал другие возможности).

Это использует Haml, но я надеюсь, что это не имеет значения -думая, что это должно быть одинаково для erb и т. д.

В layout.haml я хотел бы сослаться на представление, которое будет отображаться, и включить таблицу стилей, специфичную для представления, в соответствии с соглашением об именовании.Например, если index.haml будет отображаться, я бы хотел включить css/index.css.Каков наилучший способ сделать это?

1 Ответ

1 голос
/ 20 августа 2010

Я решил это, выполнив следующее:

В index.haml (вверху) я создал или добавил массив с именем views:

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

В layout.haml Я ссылаюсь @views:

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

Я немного разочарован необходимостью проверить @views в представлении, чтобы убедиться, что оно определено перед добавлением к нему, но сейчас это выполнимо.

РЕДАКТИРОВАТЬ: Решена проблема с необходимостью проверить, определен ли @views в каждом представлении. В config.ru добавить следующее:

before do
  @views = Array.new
end

Теперь я могу удалить эту строку из представлений:

- @views = Array.new unless defined? @views
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...