1

いくつかの Grails プラグインを取り込む Grails アプリがあります。これらのプラグインは、私自身だけでなく、他のいくつかの Grails アプリで再利用する必要があります。

Grails プラグインのいずれかの Resources Bundle で、次のように定義しています: 完全を期すためにこれを残していますが、その後 Asset-Pipline に切り替えました

modules = {
    directivea {
        resource url: 'directives/directivea/directivea.js'
        resource url: 'services/restapis.js'
    }
}

プラグインの 1 つの Javascript ファイルで、次のディレクティブを定義しています。

ModuleA.directive('directivea',function() {
    return {
        restrict: 'EA',
        scope: {
            'objId' : '='
        },
        replace: true,
        link: function(){
            $scope.ObjId = attributes[''];
            $scope.someFunction($scope.ObjId);
        },
        controller: function(){
            $scope.someFunction = function(objId){
                //some stuff happens here
            };
        },
        templateUrl: 'directives/directivea/directivea.html'
    }
});

コントローラーを正常に実行しているように見えますが、テンプレートを取り込もうとすると、チョークします。

GET /appname/directives/directivea/directivea.html 404 (見つかりません)

部分的なテンプレートが配置される場所ではないため、これは理にかなっています。しかし、それはどこでしょうか?その情報をプラグイン内に隔離しながら、すべてのダウンストリーム アプリケーションで使用できるようにするにはどうすればよいですか? 可能であれば、インライン テンプレートの定義は避けたいと思います。

**構造を含めるように編集**

プラグインの構造:

  • grails アプリ
    • conf
      • PluginNameForGrailsResources.groovy
      • BuildConfig.groovy
    • コントローラー
      • PluginControllerA.groovy
      • PluginControllerB.groovy
    • ドメイン
      • PluginDomainA.groovy
  • ウェブアプリ
    • CSS
    • ディレクティブ
      • 指令
        • ディレクティブa.js
        • ディレクティブa.html
    • サービス
      • restapis.js
  • アプリケーションのプロパティ
  • PluginNameForGrailsGrailsPlugin.groovy

私のプラグインを参照するアプリケーションの構造:

  • grails アプリ
  • conf
    • BuildConfig.groovy
  • コントローラー
  • ドメイン
  • ビュー
    • レイアウト
      • main.gsp
    • index.gsp (リソース r:require タグによるディレクティブへの参照)
  • ウェブアプリ
  • CSS
    • main.css
  • js
    • index.js
  • アプリケーションのプロパティ

**構造 POST-ASSET-PLUGIN-SWITCHOVER を含めるように編集** これ以上リソースが定義されていないため、BuildConfig.groovy はリソースの代わりにアセット パイプラインを参照するようになり、web-app 内のファイルはなくなりました

  • grails アプリ
    • conf
      • BuildConfig.groovy
    • コントローラー
      • PluginControllerA.groovy
      • PluginControllerB.groovy
    • ドメイン
      • PluginDomainA.groovy
    • 資産
      • JavaScript
        • 指令
          • ディレクティブa.js
          • ディレクティブa.html
        • サービス
          • restapis.js
      • アプリケーションのプロパティ
      • PluginNameForGrailsGrailsPlugin.groovy
4

2 に答える 2

2

Grails リソース プラグインの使用

この grails プラグインを使用するこのサンプル grails アプリを参照してください。

プラグインは角度モジュールをホストします。ディレクティブを追加するだけで他のモジュールを追加しないことで、シンプルに保とうとしました。static/..また、templateUrl in ディレクティブで使用したことにも注意してください。

Config.groovy以下の構成を使用するアプリも参照してください

grails.resources.adhoc.includes = ['/images/**', '/css/**', '/js/**', '/img/**']

この質問への回答で述べたように。この問題にぶつかっている可能性があります。

試してみる。「Hello World」は、プラグイン内の angular モジュールにあるディレクティブからレンダリングされます。

Grails の最新バージョンを使用している場合は、都合のよいときにアセット パイプラインに切り替えることをお勧めします。

Grails アセット プラグインの使用

Grails asset-pipeline プラグイン(この投稿時点で v 1.9.7) とGrails Angular-template-asset-pipeline プラグイン(この投稿時点で v 1.2.5) を使用します。

これを設定する正確な方法の詳細については、 Grails Asset Pipeline プラグインを使用して静的 HTML リソースを参照する方法 への回答を参照してください。

主に、Angular JS モジュールが小文字であるか、名前に _ または - が使用されていること、およびテンプレート ファイルのファイル名が (拡張子を無視して) 含まれている JavaScript アセットのいずれともわずかに異なることを確認してください。

于 2014-08-19T01:42:38.100 に答える
0

JavaScript は、リソースまたはアセット ディレクトリからではなく、Web アプリ ルートから参照していることに注意してください。Angular ルーティングの詳細については、コア ドキュメント: $route を参照してください。

そのtemplateUrl: directives/directivea/directivea.htmlため、実際に/web-app/directives/directivea/directivea.htmlディレクトリ内のファイルを参照する必要があります。

リソース プラグインはあまりモジュール化されていないようで、グローバル ファイルは共有 (およびその他のほとんどのもの) のために指定する必要があることに注意してください。grails 2.4 とプラグインに移行すると、assetsモジュラー ファイル パスを実行できます。

于 2014-08-18T04:17:23.887 に答える