2012-01-13 9 views
1

コントローラのモバイル版を作成しようとしたのですか?Grails:コントローラのモバイル版

今、GrailsLayoutDecoratorMapperを私のカスタムMobileDecoratorMapperで拡張しています。これは、携帯電話が検出された場合にlayout.mobile.gspを適用し、いくつかのコントローラで同様のことをしたいと思います。私の考えは、コントローラのモバイル版(例えばSomethingControllerMobileやSomethingController.mobile.groovy)が存在すればフィルタをチェックインし、デフォルトのSomethingControllerの代わりにそれにリダイレクトする場合です。

コントローラの内部にif/elseステートメントがたくさんあることを確認して、それがモバイルであるかどうかを確認したいと思っています。もしそうならば、私はスパゲティコードを望ましくありません。

あなたには意味がありますか?同様のことをやろうとしたら、あなたのアプローチは何ですか?唯一のことは、私の心に来るのは、フィルタのファイルをチェックするが、それは適切なソリューションのようには見えない、私はこれがurlmappingレベルでは、

答えて

2

を呼び出すSpring Mobile pluginあなたは条件付きでかなりエレガントなファッションで

def list = { 
    def view = "list" 
    withMobileDevice { 
     // mobile-specific logic goes here, in this simplistic example we 
     // just change the view, but you can do anything you like.... 
     view = "mobileList" 
    } 
render(view: view, model: [list: listInstance]) 
} 
+0

感謝をモバイルデバイス用のコントローラコードを実行することができます!私が特に関心を持っているのは、コントローラのロジックが違うということです。ビューのHTMLは異なりません。ユーザーエージェントと拡張レイアウトデコレータを確認してビュー部分を処理するので、モバイル用に別々のCSSとJSを読み込むことができます。これがすべて必要です。ですから、基本的には、ここにあるものと非常によく似たものを持っていますが、フィルタレベルではどのレンダリングビューを呼び出すのかというと、どのコントローラを呼び出すかを指定したいと思います。あるいは、私が呼び出すアクションを指定することもできます。例えばlistやlistMobileです。それは理にかなっていますか? – mkk

+0

@mkkモバイル固有のロジックを 'withMobileDevice'クロージャの中に置くことができます。ビューを変更するだけではありません(上のコードの私のコメントを参照してください) –

+0

ahh ok - right。私が見ることができる欠点は、それがwurflを使用していることです。それを避けたいのです。そのため、ユーザーエージェントに基づいて携帯電話を検出する独自の方法を作成したのです(そうです。 。ロジック全体がサービス内にあり、モバイルかどうかに関わらず、true/falseを返します。 deviceResolver = wurflを使用する代わりにこのプラグインに適用するのは簡単だろうと思いますか? – mkk

関連する問題