我同意droggo是响应式设计的最佳解决方案。
但是,作为替代方案,您可能会让所有webflow用户转到相同的视图,但在该视图中,您可以使用自己的taglib覆盖g:layout taglib,作为移动用户重新运行或不运行,因此可以应用适当的布局。
在这种情况下它可能有点沉重,但它会给你一个解决方案,可以在整个应用程序中重用,而不仅仅是在webflow中,它将移动专用代码保存在一个地方。
在你的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>
那么你的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布局文件 - 一个内/布局/ mobileLayout和一个内/布局/桌面布局(虽然我很欣赏这些可能不会动态匹配你现有的结构)
上面taglib中的代码只是一个粗略的指导,它需要加强处理g:applyLayout需要的其他参数。
一种选择是使用根据客户端设备和分辨率进行不同呈现的响应页面。以Twitter Boostrap和响应功能为例。这可以用CSS来完成。 – droggo 2013-02-10 22:42:05