为移动与桌面呈现不同的文件

时间:2010-12-11 16:51:00

标签: ruby mobile sinatra haml padrino

我正在使用http://padrinorb.org(haml + lesscss)为移动设备(Android / iPhone / iPad)和桌面用户编写一个小型网络应用程序,因此,我希望显示略有不同的html / css对于不同的设备。

为了确定各种客户端,我使用的是机架式移动检测,到目前为止效果很好。

要使布局成为布局/ 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 

然而,在处理偏见时,这对我没有帮助......而且感觉有人必须有一个更好的解决方案,而不仅仅是将渲染和部分包装在帮手中。

我想要的是不要使用奇怪的代码撒上我的控制器和视图,只是为了使用正确的布局呈现正确的部分/文件。

我想渲染发现找出要使用的文件,如果没有文件名,则回退到filename.haml。#{preferred_extension} .haml。

在rails中有一个mime类型的东西,我在之前的项目中使用过,但我没有找到任何类似的padrino(sinatra)

1 个答案:

答案 0 :(得分:0)

我通过在每个app / controllers /中的before块中将 @_content_type 设置为preferred_extension来解决它