如何仅在Grails 2.2.4中的特定页面上加载某些JS资源

时间:2014-09-25 15:39:10

标签: javascript grails

在Grails 2.2.4上如何只在特定页面上加载某些JS资源。目前我使用的所有JS文件都加载到所有页面上(即使是我不需要的页面)。

我的ApplicationResources看起来像这样:

modules = {
    application {
        dependsOn "jquery", "jquery-ui", "emberjs","emberjsdata", "pjax", "highchart", "filetype", "theme"
        resource url:'js/application.js'
        resource url:'js/App.js'
        resource url:'js/bootstrap-select.js'
        resource url:'js/bootstrap-switch.js'
    }

    request {
        dependsOn "application"
        resource url: 'js/request.js'
    }

    lowside {
        dependsOn "application"
        resource url:'js/lowside.js'
    }

    pjax {
        resource url: 'js/jquery.pjax.js', disposition: "head"
    }

    highchart {
        resource url: 'js/highcharts.js', disposition: "head"
    }

    filetype {
        resource url: 'js/filestyle.js', disposition: "head"
    }

    emberjs {
        dependsOn 'jquery,handlebars'
        resource url: 'js/ember-latest-stable.js'
    }
    handlebars {
        resource url: 'js/handlebars-1.0.0-rc.4.js'
    }
    emberjsdata{
        dependsOn 'emberjs'
        resource url: 'js/ember-data-latest.js'
    }

    theme {
        resource url: 'js/theme.js'
    }
}

在我的布局页面上我这样做:

<r:require module="application"/>

1 个答案:

答案 0 :(得分:0)

您配置布局和资源的方式,Grails正在完成它的设计目标。通过在(我假设)仅布局页面中要求application模块,每个单独的资源将包含在每个呈现的GSP中。你有几个选择来阻止这种情况发生。

  1. 如果您的大量资源仅用于单个页面,请考虑创建一个只包含您需要的 common Javascript或CSS资源的模块。主模块中应该需要此模块。然后,在需要更多利基资源的各个页面上,您可以在head标记中使用require标记,就像在布局页面中一样。例如,假设您只需要在一个页面上使用高图。该页面可能看起来像这样:
  2. <html> <head> ... <r:require module="highchart"/> </head> <body> ... </body> </html>

    1. 如果有多个页面需要单个资源(但整个应用程序不需要此资源),请考虑为这些页面组创建布局。如果您的应用程序中的页面以“功能”为中心,则此功能尤其有效。回到高图的例子,假设您有一个应用程序的“分析”部分,其中有各种页面使用高图。您可以创建一个布局文件:layouts/analytics.gsp,如下所示:
    2. <html> <head> ... <r:require modules="common,highchart"/> <r:layoutResources /> <g:layoutHead/> </head> <body> <g:layoutBody/> <r:layoutResources/> </body> </html>