9

私は一連のネストされたディレクトリに個々の JavaScript ファイルの混乱を含む grails アプリを持っています。リソースプラグインを介してそれらを管理したいのですが、それぞれを明示的に登録する必要はありません。

Web ディレクトリ構造

webapp
  app
    controller
      controller1.js
      controller2.js
      ...
    model
      model1.js
      ...
    view
      view1.js

素晴らしいことは、私のAppResources.groovyファイルで宣言することです:

resource url: 'app/**/*.js'

しかし、それは機能しません-ヌルポインターをスローします。私はもう試した:

resource url: 'app/**'しかし、運が悪い

ディレクトリ構造を再帰するコードを構成ファイルに入れようと思ったのですが、うまくいかないようです。これが私が試したことです:

def iterClos = {
        it.eachDir( iterClos );
        it.eachFile {
            resource url: ${it.canonicalPath};

        }

    }

    iterClos( new File("$grails.app.context/app") )

残念ながら、それも失敗しました。

どうすればこれを達成できるか考えている人はいますか?

4

1 に答える 1

19

問題が解決しました。

結局のところ、コードを実行して JavaScript ディレクトリを再利用するというアイデアは機能します。コードが間違っていました。私のjavascriptファイルを動的にロードするコードは次のとおりです。

--AppResources.groovy

import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH

modules = {
    core {
        resource url: '/resources/css/app.css', disposition: 'head'
        resource url: '/resources/css/myapp.css', disposition: 'head'
        resource url: '/extjs/ext-all-debug.js', dispostion: 'head'

        getFilesForPath('/app').each {
          resource url: it
        }
    }
}

def getFilesForPath(path) {

    def webFileCachePaths = []

    def servletContext = SCH.getServletContext()

    //context isn't present when testing in integration mode. -jg
    if(!servletContext) return webFileCachePaths

    def realPath = servletContext.getRealPath('/')

    def appDir = new File("$realPath/$path")

    appDir.eachFileRecurse {File file ->
        if (file.isDirectory() || file.isHidden()) return
        webFileCachePaths << file.path.replace(realPath, '')
    }

    webFileCachePaths
}

上記により、Resource プラグインが私の JavaScript ファイルを追跡します。リソースがデバッグ モードの場合、html は次のようになります。

<script src="/myapp/extjs/ext-all-debug.js?_debugResources=y&n=1336614540164" type="text/javascript" ></script>
<script src="/myapp/app/controller/LogController.js?_debugResources=y&n=1336614540164" type="text/javascript" ></script>
<script src="/myapp/app/controller/LoginController.js?_debugResources=y&n=1336614540164" type="text/javascript" ></script>
<script src="/myapp/app/controller/ProfileController.js?_debugResources=y&n=1336614540164" type="text/javascript" ></script>

...

Grails は初めてなので、構成ファイル内に実行可能コードを入れることができるのは非常に歓迎すべき事実です。

于 2012-05-10T01:52:53.077 に答える