0

デスクトップ ブラウザー アプリで正常に動作する grails Webflow があります。モバイル サイトで Webflow を再利用したいと考えています。2 つの別個の Webflow を使用せず、各状態で使用されるページを変更するだけでよいと思います。私は次のことを試しました:

viewState{
    String view = 'viewState'
    boolean isMobile = this.isMobileUser()
    if(isMobile){
        view = "/flowDir/mobile/viewState"
    }       
    render(view:view)       
}

ただし、これは機能していません。モバイル サイトが最初にアクセスされた場合、デスクトップはモバイル ページを取得し、その逆も同様です。

誰かがこの問題に遭遇しましたか? まったく同じことをする 2 つの Webflow があるのは本当に嫌です。また、Sitemesh にハッキングするのも嫌いです。このフローを再利用する方法についてのアイデアや提案をいただければ幸いです。

4

2 に答える 2

0

モバイル ビューの解像度をアフター フィルターに入れて、Web フローが同じように実行されるようにしますが、レンダリングされるビューをインターセプトして名前を変更します。

http://adammonsen.com/post/548

于 2013-02-11T00:46:37.440 に答える
0

レスポンシブ デザインが最適なソリューションであるという droggo の意見に同意します。

ただし、別の方法として、すべての webflow ユーザーを同じビューに移動させることもできますが、そのビュー自体の中で、g:layout taglib を独自の taglib でオーバーライドして、自分が実行中かどうかを判断できます。モバイル ユーザーかどうかに関係なく、適切なレイアウトを適用できます。

このコンテキストでは少し扱いが難しいかもしれませんが、Webflow 内だけでなく、アプリ全体で再利用可能なソリューションを提供し、モバイル固有のコードを 1 か所に保持します。

だからあなたのウェブフローで:

viewState{
    String view = 'viewState'
    [snip] The rest of your code goes here     
    render(view:view)       
}

次に、あなたの見解:

<myapp:applyLayout name="someWebflowLayout">
    [snip] Your non-layout GSP code goes here    
</myapp:applyLayout>

次に、あなたのtaglib:

class MyAppTagLib {
    static namespace = "myapp"

    def applyLayout = { attrs, body ->

        boolean mobileUser = false
        [snip] some logic to determine if this is a mobile user or not goes here

        if (mobileUser) {
            attrs.name = "mobileLayout/${attrs.name}"
        } else {
            attrs.name = "desktopLayout/${attrs.name}"
        }

        out << g.applyLayout(attrs, body)
    }
}

すると、someWebflowLayout という名前の 2 つのレイアウト ファイルが作成されます。1 つは /layouts/mobileLayout 内に、もう 1 つは /layouts/desktopLayout 内にあります (ただし、これらが既存の構造と完全に一致しない場合があります)。

上記の taglib のコードは大まかなガイドに過ぎず、g:applyLayout が取る他のパラメーターを処理するには、強化が必要です。

于 2013-03-14T17:03:44.817 に答える