[英]AEM Sightly - Is it possible to create custom data-sly attributes?
我想知道是否有办法创建自定义属性,例如:
<div data-sly-myAttribute="${whatever}"></div>
就像自定义JSP标记一样。
编辑 :
根据这篇博客 ,截至2014年5月4日,这是不可能的。 这有什么消息吗?
不,由于该实现不符合规范[0],因此无法创建自己的块元素。 与仅添加新插件相比,涉及更多细微之处,其中一个插件是在同一HTML元素上使用多个块时的块元素优先级; 更不用说如果可能的话,没有什么可以阻止你覆盖提供的插件。
但是,如果您认为需要新的块元素,请向规范发送拉取请求,并使用明确定义的用例。 此外,如果您在Apache Sling开发邮件列表[1]上讨论您的用例,它可能会有所帮助 - 也许您需要的是其他开发人员也想到的东西,在这种情况下,协作肯定有助于找到最佳解决方案问题。
[0] - https://github.com/Adobe-Marketing-Cloud/sightly-spec/blob/1.2/SPECIFICATION.md
[1] - https://sling.apache.org/project-information.html#mailing-lists
编辑:在这一点看起来这是不可行的,因为它们所引入的包不会导出所需的impl
类。感谢Radu Cotescu在评论中指出它。
我将在下面留下原来的答案。 如果有人真的需要或只是想要你可以在github上分叉Sling repo并添加/部署你自己的插件或者只是导出必要的impl
包并将插件添加到你自己的代码库中
通过Sightly源代码,你可以看到他们称之为Plugins的列表,它们提供了每个sightly块语句的实现。 这些可以在这里找到: https : //github.com/apache/sling/tree/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/plugin
这只是一个猜测,我还没有尝试过,但似乎你可以提供自己的类扩展org.apache.sling.scripting.sightly.impl.plugin.PluginComponent
并且是一个Plugin
OSGi服务。 我会尝试复制一个现有的插件,看看你是否可以使用新名称。 也许是TextPlugin
,看起来很简单。
希望这会指向一个会带来一些乐趣的方向:)
或许这样的事情
@Component
@Service(Plugin.class)
@Properties({
@Property(name = Plugin.SCR_PROP_NAME_BLOCK_NAME, value = "foo"),
@Property(name = Plugin.SCR_PROP_NAME_PRIORITY, intValue = 9)
})
public class FooPlugin extends PluginComponent {
@Override
public PluginInvoke invoke(final Expression expression, PluginCallInfo callInfo, final CompilerContext compilerContext) {
return new DefaultPluginInvoke() {
@Override
public void beforeChildren(PushStream stream) {
String variable = compilerContext.generateVariable("fooContent");
stream.emit(new VariableBinding.Start(variable,
compilerContext.adjustToContext(expression, MarkupContext.TEXT, ExpressionContext.TEXT).getRoot()));
stream.emit(new OutVariable(variable));
stream.emit(VariableBinding.END);
Patterns.beginStreamIgnore(stream);
}
@Override
public void afterChildren(PushStream stream) {
Patterns.endStreamIgnore(stream);
}
};
}
}
然后在一个正确的文件中使用它
<div data-sly-foo="${properties.jcr:description}">This text should get replaced</div>
如果我开始尝试,我会更新这个答案。
注意:但是,我会说,如果你想在实际场景中尝试这样做,可能有更好的方法来解决你试图以这种方式解决的问题。 视力正常的团队试图向我们提供我们需要做的所有事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.