визуализировать разные файлы для мобильных и настольных компьютеров

Я кодирую небольшое веб-приложение, используя http://padrinorb.org (haml+lesscss) как для мобильных устройств (Android /iPhone/iPad) и пользователей настольных компьютеров, и поэтому я хочу отображать немного разные html/css для разных устройств.

Для определения различных клиентов я использую мобильное обнаружение стойки, которое до сих пор отлично работает.

Чтобы макет стал layouts/application.mobile, я использую эти помощники/обертки для render

def preferred_extension 
  if request.xhr?
    "js"
  elsif env["X_MOBILE_DEVICE"]
    "mobile"
  else
    "html"
  end 
end 

def preferred_layout 
  if preferred_extension.eql? "html"
    "application"
  else
    "application.#{preferred_extension}"
  end 
end 

def render_preferred filename
  filename = "#{filename}.#{preferred_extension}"
  if request.xhr?
    layout_file = false
  else
    layout_file = "layouts/#{preferred_layout}".to_sym
  end
  render filename, :layout => layout_file
end 

Однако это не помогает мне при работе с партиалами... и мне кажется, что у кого-то должно быть лучшее решение для этого, чем просто обертывание рендеринга и партиала в помощнике.

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

Я хотел бы, чтобы обнаружение рендеринга определяло, какой файл использовать, и возвращалось к файлу name.haml, если имя файла отсутствует.#{preferred_extension}.haml.

В рельсах есть такая штука типа пантомимы, которую я использовал в предыдущем проекте, но я не нашел ничего подобного для падрино (синатра)


person qzio    schedule 11.12.2010    source источник


Ответы (1)


Я решил это, установив @_content_type в Preferred_extension в блоке перед каждым приложением/контроллерами/

person qzio    schedule 19.12.2010
comment
к настоящему времени должна быть возможность использовать params[:format] = :mobile для отображения представлений/макета/application.mobile.haml - person qzio; 21.12.2010