【问题标题】:Grails: mobile version of a controllerGrails:移动版控制器
【发布时间】:2012-01-13 12:39:18
【问题描述】:

我想知道您是否尝试过制作控制器的移动版本?

现在我正在使用我的自定义 MobileDecoratorMapper 扩展 GrailsLayoutDecoratorMapper,如果检测到手机,它会应用 layout.mobile.gsp,并且我想对某些控制器执行类似的操作。我的想法是检查过滤器是否存在控制器的移动版本(例如SomethingControllerMobile 或SomethingController.mobile.groovy),如果存在则重定向到它而不是默认的SomethingController。

这样做的原因是我想避免在控制器本身内部使用大量 if/else 语句来检查它是否是可移动的,如果是,则做一些不同的事情——我不想要意大利面条代码。

这对您有意义吗?如果是,您是否尝试过做类似的事情?您的方法是什么?我唯一想到的是检查过滤器中的文件,但它看起来不是一个合适的解决方案,我认为这应该可以在 urlmapping 级别完成,根据 url grails 决定哪个控制器调用

【问题讨论】:

    标签: grails controller


    【解决方案1】:

    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])
    }
    

    【讨论】:

    • 谢谢!但我特别感兴趣的是为控制器设置不同的逻辑,而不是为视图设置不同的 html。我通过检查用户代理和扩展布局装饰器来处理视图部分,这样我就可以为移动设备加载单独的 CSS 和 JS,这就是我所需要的。所以基本上我想有一些非常相似的东西,但在过滤器级别,而不是说要渲染哪个视图,我想指定我将调用哪个控制器。或者,我可以指定要调用的操作 - 例如 list 或 listMobile。有意义吗?
    • @mkk 您可以将特定于移动设备的逻辑放入 withMobileDevice 闭包中,它不仅限于更改视图(请参阅我在上面代码中的评论)
    • 啊,好吧 - 对。我可以看到的缺点是它使用 wurfl,我们希望避免这种情况,这就是为什么我们创建了自己的方法来检测基于用户代理的手机(是的,我知道它可以修改 - 对我们来说不是问题) .整个逻辑都在服务中,它返回真/假——无论它是否是移动设备。你认为应用到这个插件而不是使用 deviceResolver = wurfl 会很容易吗?
    • 我快速浏览了插件的源代码,您似乎很容易在其中添加自己的检测方法。您只需让您的检测类实现org/springframework/mobile/device/DeviceResolver 接口并使deviceResolver Spring bean 成为此类的一个实例。如果您需要更多帮助,请与我们联系。
    • 感谢 Don - 确实这似乎是一件容易的事。我会试试这个
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多