gpt4 book ai didi

AEM 6.0 : Additional parameters when using data-sly-resource?

转载 作者:行者123 更新时间:2023-12-01 23:46:42 26 4
gpt4 key购买 nike

我正在尝试实现一些我希望相对简单的东西...我有一个组件(让我们称之为包装组件),其中通过 data-sly 包含另一个组件(让我们称之为内部组件) -资源标签:

<div data-sly-resource="${ 'inner' @ resourceType='/projectname/components/inner' }"></div>

我想用这个标签传递一些额外的参数,特别是可以在内部组件模板中直接拾取的参数?我试图根据通过 data-sly-resource 调用组件时传入的参数来指定内部模板外部 html 标记是否展开。

在尝试并仔细阅读了这些简单的文档后,我找不到实现此目的的方法。

有人知道这是否可行吗?

非常感谢,

戴夫

最佳答案

您可以使用 Use-API 来写入和读取请求属性,如果 the alternatives proposed here不适合你。

两个组件的简单示例,其中外部组件设置属性,然后由内部组件显示:

/apps/siteName/components/
outer/ [cq:Component]
outer.html
inner/ [cq:Component]
inner.html
utils/ [nt:folder]
setAttributes.js
getAttributes.js
/content/outer/ [sling:resourceType=siteName/components/outer]
inner [sling:resourceType=siteName/components/inner]

/apps/siteName/components/outer/outer.html:

<h1>Outer</h1>
<div data-sly-use="${'../utils/setAttributes.js' @ foo = 1, bar = 2}"
data-sly-resource="inner"></div>

/apps/siteName/components/inner/inner.html:

<h1>Inner</h1>
<dl data-sly-use.attrs="${'../utils/getAttributes.js' @ names = ['foo', 'bar']}"
data-sly-list="${attrs}">
<dt>${item}</dt> <dd>${attrs[item]}</dd>
</dl>

/apps/siteName/components/utils/setAttributes.js:

use(function () {
var i;
for (i in this) {
request.setAttribute(i, this[i]);
}
});

/apps/siteName/components/utils/getAttributes.js:

use(function () {
var o = {}, i, l, name;
for (i = 0, l = this.names.length; i < l; i += 1) {
name = this.names[i];
o[name] = request.getAttribute(name);
}
return o;
});

访问/content/outer.html 时的结果输出:

<h1>Outer</h1>
<div>
<h1>Inner</h1>
<dl>
<dt>bar</dt> <dd>2</dd>
<dt>foo</dt> <dd>1</dd>
</dl>
</div>

正如 @AlasdairMcLeay 所评论的,如果请求中多次包含内部组件,则此提议的解决方案会出现问题:组件的后续实例仍会看到最初设置的属性。

这可以通过在访问属性时删除属性来解决(在 getAttributes.js 中)。但是,如果内部组件被拆分为多个 Sightly(或 JSP)文件,而这些文件都需要访问这些属性,那么这又会成为一个问题,因为访问请求属性的第一个文件也会删除它们。

这可以通过一个标志来进一步解决,告诉属性在访问它们时是否应该被删除......但它也说明了为什么使用请求属性不是一个好的模式,因为它基本上包括使用全局变量作为组件之间通信的一种方式。因此,如果 the other two solutions proposed here 则将此视为解决方法不是一个选择。

关于AEM 6.0 : Additional parameters when using data-sly-resource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com