1

我有一个 Grails 应用程序,它引入了几个 Grails 插件。这些插件需要被其他几个 Grails 应用程序重用,而不仅仅是我自己的。

在其中一个 Grails 插件的资源包中,我定义了以下内容: 为了完整性而保留它,但我已经切换到 Asset-Pipline

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

在其中一个插件的 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'
    }
});

它似乎可以很好地执行控制器,但是当它试图拉入模板时,它会窒息:

获取 /appname/directives/directivea/directivea.html 404(未找到)

这是有道理的,因为那不是部分模板所在的位置。但它会在哪里?如何将这些信息隔离在插件中,但可供所有下游应用程序使用?如果可以的话,我想避免定义内联模板。

**编辑以包含结构**

插件结构:

  • grails 应用程序
    • 会议
      • PluginNameForGrailsResources.groovy
      • BuildConfig.groovy
    • 控制器
      • PluginControllerA.groovy
      • PluginControllerB.groovy
    • 领域
      • PluginDomainA.groovy
  • 网络应用
    • css
    • 指令
      • 指令a
        • 指令a.js
        • 指令a.html
    • 服务
      • restapis.js
  • 应用程序属性
  • PluginNameForGrailsGrailsPlugin.groovy

引用我的插件的应用程序的结构:

  • grails 应用程序
  • 会议
    • BuildConfig.groovy
  • 控制器
  • 领域
  • 意见
    • 布局
      • 主文件
    • index.gsp(通过资源 r:require 标签引用指令)
  • 网络应用
  • css
    • main.css
  • js
    • index.js
  • 应用程序属性

**编辑以包含结构 POST-ASSET-PLUGIN-SWITCHOVER** 不再定义资源,BuildConfig.groovy 现在引用资产管道而不是资源,web-app 中不再有文件

  • grails 应用程序
    • 会议
      • BuildConfig.groovy
    • 控制器
      • PluginControllerA.groovy
      • PluginControllerB.groovy
    • 领域
      • PluginDomainA.groovy
    • 资产
      • javascripts
        • 指令a
          • 指令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”是从插件内的角​​度模块中存在的指令呈现的。

如果您使用的是最新版本的 Grails,那么我建议您在方便时切换到资产管道。

使用 Grails 资产插件

使用Grails 资产管道插件(截至本文发布时为 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-app 根目录引用事物,而不是从资源或资产目录。您可以从核心文档中找到有关 Angular 路由的更多信息:$route

所以templateUrl: directives/directivea/directivea.html需要实际引用/web-app/directives/directivea/directivea.html目录中的一个文件。

请注意,资源插件似乎不是非常模块化,并且需要指定全局文件以进行共享(以及大多数其他事情)。如果你迁移到 grails 2.4 和assets插件,你可以做模块化文件路径。

于 2014-08-18T04:17:23.887 回答