【问题标题】:Reuse Grails Webflow for mobile and desktop site为移动和桌面站点重用 Grails Webflow
【发布时间】:2013-03-15 01:03:44
【问题描述】:

我有一个适用于我的桌面浏览器应用程序的 grails webflow。现在我想为我的移动网站重用 webflow。我不希望有 2 个单独的网络流,而只是更改用于每个状态的页面。我尝试了以下方法:

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

但是这不起作用。如果首先访问移动站点,则桌面将获取移动页面,反之亦然。

有人遇到过这个问题吗?我真的很讨厌有 2 个做同样事情的 webflow。我也讨厌侵入 Sitemesh。任何关于如何重用此流程的想法或建议将不胜感激。

【问题讨论】:

  • 一种选择是使用根据客户端设备和分辨率呈现不同的响应式页面。以 Twitter Boostrap 和响应功能为例。这可以通过 css 完成。

标签: grails


【解决方案1】:

尝试将移动视图分辨率放入后过滤器中,以便您的 Web 流执行相同的操作,但您拦截正在呈现的视图并重命名它。

http://adammonsen.com/post/548

【讨论】:

  • 我喜欢这个解决方案,但 afterInterceptor 似乎没有触发。我想知道 Webflow 的处理方式是否不同。
【解决方案2】:

我同意 droggo 的观点,即响应式设计是最好的解决方案。

但是,作为替代方案,您可能会让所有 webflow 用户进入同一个视图,但在该视图本身内,您可以使用自己的标签库覆盖 g:layout 标签库,该标签库能够确定您是否是否以移动用户身份运行,因此可以应用适当的布局。

在这种情况下可能有点笨拙,但它会为您提供一个可在整个应用程序中重复使用的解决方案,而不仅仅是在 webflow 中,并且它将特定于移动设备的代码保存在一个地方。

所以在你的网络流中:

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>

然后是你的标签库:

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 的布局文件 - 一个在 /layouts/mobileLayout 中,一个在 /layouts/desktopLayout 中(尽管我很欣赏这些可能与您现有的结构不完全匹配)

上面的 taglib 中的代码只是一个粗略的指导,它需要支持来处理 g:applyLayout 需要的其他参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多