我正在使用http://padrinorb.org (haml+lesscss) 为移动(android/iPhone/iPad)和桌面用户编写一个小网络应用程序,因此,我希望显示稍微不同的 html/css不同的设备。
为了确定各种客户端,我使用 rack-mobile-detect 到目前为止效果很好。
为了让布局成为 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
但是,这在处理部分时对我没有帮助......而且感觉必须有人对此有更好的解决方案,而不仅仅是将渲染和部分包装在帮助器中。
我想要的是不要在我的控制器和视图上撒上奇怪的代码,只是为了用正确的布局呈现正确的部分/文件。
我希望渲染发现找出要使用的文件,如果没有 filename.#{preferred_extension}.haml,则回退到 filename.haml。
在 Rails 中有我在以前的项目中使用过的这种 mime 类型的东西,但我没有找到任何与 padrino (sinatra) 类似的东西