gpt4 book ai didi

ruby - 在 Sinatra 中,提供 iPhone 布局与普通布局的最佳方式是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 06:58:05 25 4
gpt4 key购买 nike

我正在写一个 Sinatra应用程序需要根据用户使用的是 iPhone 还是常规浏览器来呈现不同的布局。我可以使用 Rack-Mobile-Detect 检测浏览器类型但我不确定告诉 Sinatra 使用哪种布局的最佳方式。

此外,我有一种感觉,我选择这样做的方式也可能会破坏页面缓存。是真的吗?

示例代码:

require 'sinatra/base'
require 'haml'
require 'rack/mobile-detect'

class Orca < Sinatra::Base

use Rack::MobileDetect

helpers do
def choose_layout
if request.env['X_MOBILE_DEVICE'] == :iPhone
# use iPhone layout
else
# use normal layout
end
end
end

before do
# should I use a before filter?
choose_layout()
end

get '/' do
haml :home # with proper layout
end

end #Class Orca

最佳答案

这就是我最终做的:

require 'sinatra/base'
require 'haml'
require 'rack/mobile-detect'

class Orca < Sinatra::Base

use Rack::MobileDetect

# HAML template options
# Use HTML5 doctype
set :haml, {:format => :html5 }

helpers do

def get_layout
# For AJAX (XMLHttpRequest) requests, don't use a layout
if request.xhr? then
@layout = false
exit
end

# For non-AJAX (XMLHttpRequest) requests, choose correct layout
# For each mobile device, you will need a layout_<device>.haml file
# in the Views directory
@layout = case request.env['X_MOBILE_DEVICE']
when /iPhone|iPod/ then :layout_iphone

# when "Android" then :layout_android

else true # use default Sinatra layout
end
end

end # helpers

before do
get_layout()
end # before filter

get '/' do
# Will use iPhone layout for iPhone|iPod,
# Sinatra default layout for desktop browsers
haml :home, :layout => @layout
end

end # Class

关于ruby - 在 Sinatra 中,提供 iPhone 布局与普通布局的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2978126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com