2010-12-11 9 views
0

モバイル(アンドロイド/ iPhone/iPad)とデスクトップユーザーの両方でhttp://padrinorb.org(haml + lesscss)を使用している小さなウェブアプリケーションでコーディングしています。異なるデバイスのhtml/css。モバイル用とデスクトップ用の異なるファイルをレンダリングする

さまざまなクライアントを特定するために、私はrack-mobile-detectを使用しています。

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。レールで

は、私が以前のプロジェクトで使用されるこのMIMEタイプのものがあるが、私はPadrinoのための同様のもの(シナトラ)

答えて

0

私は内部のブロックの前にpreferred_extensionする@_content_typeを設定することによってそれを解決を見つけることがあります各app/controllers/

+0

今のところ、params [:format] =:mobileを使用してviews/layout/application.mobile.hamlをレンダリングすることができるはずです – qzio

関連する問題