用于渲染图像的 Grails Resources 插件、模块和 <r:img>?

Posted

技术标签:

【中文标题】用于渲染图像的 Grails Resources 插件、模块和 <r:img>?【英文标题】:Grails Resources plugin, modules and <r:img> to render images? 【发布时间】:2012-02-18 14:31:00 【问题描述】:

尝试学习资源插件

据我了解,它有助于定义“资源”,例如 css 和 javascript 文件,并在需要时自动将它们拉入您的 gsp。我了解如何创建可以使用标签等加载的模块。

我不明白的部分是:http://grails-plugins.github.com/grails-resources/guide/4.%20Using%20resources.html#4.2%20Linking%20to%20images

所以我在 Config.groovy 中创建了一个名为“images”的模块,如下所示:

grails.resources.modules = 
    images 
        resource url:'/images/view.jpg', attrs:[width: 1280, height:720 , alt: 'my view']
        resource url:'/images/breakfast.jpg', attrs:[width: 1280, height:720, alt: 'breakfast']
    

资源包含在head部分的.gsp页面中,如下:

<head>
  <r:require modules="jquery-ui, blueprint"/>
</head>

我知道资源已成功添加到 head 部分,因为当我检查页面源时,我在那里看到它们:

<link href="/ResourceTest/static/Aa7jV0N2qZjOz7TLZ9cl5cREIh2y5jJYV0ytn4nQg9r.jpg" rel="shortcut icon"    />
<link href="/ResourceTest/static/IpQBSjrYeLDdSUBGbP3jhf6Kkhvu1zV3XRtwWfKOIMn.jpg" rel="shortcut icon"    />

我的问题是:图像资源是如何使用的?我的意思是我知道它是否是 javascript,资源的导入使您可以使用 html 代码中的功能,但关于图像,该网站说“一旦你这样做了,使用引用它们将自动设置宽度、高度等属性。”

怎么样?我尝试了以下方法:

<r:img module="images">
<r:img >

还有一些没有成功的人

起作用的是:

<r:img uri="/images/breakfast.jpg">

但是无论你是否添加带有 r:require 标签的模块,这都有效。那么,使用这个插件来处理图像有什么意义,我将如何使用它?

【问题讨论】:

&lt;r:img uri="/images/breakfast.jpg"&gt; 时不只是从资源条目中添加宽度和高度吗?至少文档中是这么说的…… 如果这就是它所做的一切 - 那我想那很酷..当我评论 标签时它没有任何区别..所以我不知道 我猜它可以在生产模式下帮助/处理缓存、gzip 等内容 【参考方案1】:

&lt;r:img&gt; 标签在没有&lt;r:require&gt; 的情况下工作得很好; it even works with undeclared image resources。

require标签的重点是防止资源重复。因此,例如,假设您有多个依赖于 jQuery 的 javascript 资源,并且它们都是必需的。添加另一层复杂性:假设您实际上是通过 sitemesh 将不同的 gsp 模板组合在一起,并且它们每个都有自己的资源依赖关系。如果您只是在每个 gsp 布局的头部放置普通的 HTML 代码来引用这些资源,您可能会在页面标题中获得它们的多个实例,这可能会出现问题。使用资源插件可确保您只获得所需资源的一个实例。

请参阅 http://grails-plugins.github.io/grails-resources/ref/Tags/require.html 和 http://grails-plugins.github.io/grails-resources/ref/Tags/layoutResources.html。

但是,对于图像,这并不是必需的。如果您在一个页面上不止一次使用图像,可能是因为您想要它,或者因为您正在应用冗余布局并且需要进行一些重构。因此,您是正确的,require 标记对于通过&lt;r:img&gt; 调用的图像并没有太大作用。这仅仅是因为图像是一种不同类型的资源,因此它们的处理方式不同。不要出汗。 :)

【讨论】:

以上是关于用于渲染图像的 Grails Resources 插件、模块和 <r:img>?的主要内容,如果未能解决你的问题,请参考以下文章

Grails 和 Spring - 在 resources.groovy 中如何设置列表

将剪切图像之一分配给精灵渲染器

Grails - 从 Javascript 方法调用控制器和渲染模板

Grails 渲染不同控制器的视图

Grails控制器渲染方法render vs respond

将应用程序注入resources.groovy