我有一个关于使用Sightly访问组件的子节点的问题.我有一个模板,它使用data-sly-resource引入一个基本的图像组件,就像这样.
<div class="${wcmmode.edit ? 'image-edit image' : 'image'}" data-sly-resource="${ 'heroImage' @ resourceType='/libs/foundation/components/image', appendPath='image', selectors='fileReference' }"> </div>
Run Code Online (Sandbox Code Playgroud)
我想要做的是根据图像组件是否实际具有图像集来更改css类.为此,我的计划是访问图像组件节点并读取其文件引用.沿途的东西
<h1>${ properties["heroImage"] }</h1>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.我的问题是如何从我的模板中访问heroImage资源的fileReference,将其视为子节点.
谢谢,哈利
我想将一个参数从html传递给WCMUse类.
Java的:
public class ComponentHelper extends WCMUse {
public void activate() throws Exception {}
...
public String methodA(String parameter1) {
...
}
public String getParam() {
String param = "";
...
return param;
}
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<componentHelper data-sly-use.componentHelper="ComponentHelper" data-sly-unwrap />
...
<div>
${componentHelper.methodA @ parameter1=componentHelper.param}
<!--/* Also tried: ${componentHelper.methodA @ componentHelper.param} */-->
</div>
Run Code Online (Sandbox Code Playgroud)
不幸的是,看起来我无法将任何参数传递给方法.有没有办法从html传递参数到WCMUse类?
在我的html页面中,我想循环遍历我的Java类返回的属性,但是在<script>标记下进行.
目前我的html页面有这样的:
<div id="map_wrapper">
<div data-sly-use.ev="Foo"
class="mapping"
id="${ev.googleClass || ''"
>
</div>
</div>
<script>
....
var markers = [
['Bondi Beach', -33.890542, 151.274856],
['Coogee Beach', -33.923036, 151.259052],
['Cronulla Beach', -34.028249, 151.157507],
['Manly Beach', -33.80010128657071, 151.28747820854187],
['Maroubra Beach', -33.950198, 151.259302]
];
.....
</script>
Run Code Online (Sandbox Code Playgroud)
我的Java类有以下getter:
//returns [0] = "something, -33.89, 151.2" [1] = "beach, -33.9, 15.02" etc.
public List<String> getVals() {
return vals;
}
public String getGoogleClass() {
if (vals.size() == 0)
return "";
return "map_canvas";
}
Run Code Online (Sandbox Code Playgroud)
题
如何用返回的值替换标记中markers …
我试图从一个轻松的JavaScript使用功能访问OSGi服务.通过吊索SlingScriptHelper.我可以sling.getService(Service.class)从javascript 调用该方法,但我不知道如何在javascript中指定类.
看起来应该可以使用完全限定名称或使用rhino来引用java类importPackage(..).
但是,我得到以下异常:
org.apache.sling.scripting.sightly.SightlyException:
org.mozilla.javascript.EvaluatorException: Can't find method
org.apache.sling.scripting.core.impl.InternalScriptHelper.getService(object).
Run Code Online (Sandbox Code Playgroud) 我正在尝试从Sightly列表中的项目总数中减去2。
<ul data-sly-list="${javaClass.list}">
<li>
<span> ${itemList.size -2 @ context='number'}</span>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
结果是:
org.apache.sling.scripting.sightly.SightlyException:模板中的解析错误...:表达式$ {itemList.size -2 @ context ='number'}的令牌识别错误:'-'
为此,我真的必须在Java中创建一个方法吗?喜欢:
javaClass.getListCountMinusTwo()
Run Code Online (Sandbox Code Playgroud)
对于任何解决方法,我将不胜感激。
检查这个
<a href="${mybean.href}" data-sly-test="${mybean.href}">
<img src="myimage.jpg" />
</a>
Run Code Online (Sandbox Code Playgroud)
我们需要的
当data-sly-test =“ $ {mybean.href}”计算为false时,仅隐藏锚标记,而不隐藏其子元素。默认行为是,当锚标记消失时,img标记也会消失。我们只想隐藏包装标签。
我希望这样的参数
<a href="${mybean.href}" data-sly-test="${mybean.href @ hideChildren=false}">
<img src="myimage.jpg" />
</a>
Run Code Online (Sandbox Code Playgroud) 我可以在我包含的另一个文件中使用变量吗?
在我的HTL(file1.html)我有:
<sly data-sly-test.myVar="${properties.myVarFromDialog}"></sly>
<sly data-sly-include="/file2.html"></sly>
Run Code Online (Sandbox Code Playgroud)
我可以在file2.html中使用myVar吗?我没有任何价值.有没有办法从file1.html获取该值以在file2.html中使用
我有一段Sightly/HTL代码如下 -
<div class="tooltip_modal">
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<h5>Tooltip</h5>
</div>
<div class="modal-body">
<p>${properties.tooltip_textfield}</p>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
请注意,${properties.tooltip_textfield}硬编码到代码中.我将此代码包含在我的组件中,如下所示 -
<div data-sly-include="/custom/tooltip-modal/tooltip-modal.html" data-sly-unwrap></div>
Run Code Online (Sandbox Code Playgroud)
现在我想将一个参数传递给data-sly-include语句,这样当我的HTML代码被渲染时,应该放置传递的参数来代替${properties.tooltip_textfield}.
换一种说法 -
打电话给这个
<div data-sly-include="/custom/tooltip-modal/tooltip-modal.html" parameter= "Dummy Text" data-sly-unwrap></div>
Run Code Online (Sandbox Code Playgroud)
应该呈现这个 -
<div class="tooltip_modal">
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<h5>Tooltip</h5>
</div>
<div class="modal-body">
<p>Dummy Text</p>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这可能吗?提前致谢!
我试图允许作者根据对话框中的下拉菜单使用选项“h1、h2、h3、h4”更改标记中的标题大小。如果未选择,则应默认为 h2。
我尝试使用三元代码来执行此操作,就像处理动态类或内容一样,但是当我执行此操作时,它只会将代码打印在页面上。以下结果应该是<h2> Heading </h2>或已将 h2 替换为对话框选择
<${properties.headingSize ? properties.headingSize : 'h2'}>
${properties.heading}
</${properties.headingSize ? properties.headingSize : 'h2'}>
Run Code Online (Sandbox Code Playgroud)
Inspect Element 中此代码的结果是
<${properties.headingSize ? properties.headingSize :="h2" }>Heading <!--${properties.headingSize-->
Run Code Online (Sandbox Code Playgroud)
这不是完成动态标记的推荐方法吗?或者有没有办法让三元正常工作?
HTL 中是否有数字格式化程序可以将数字格式化为 2 位数字。我想要
<h2>${ '#' @ format=3}</h2>
Run Code Online (Sandbox Code Playgroud)
渲染 03 而不是 3。
有没有一种 HTL 方法可以在不借助 Sling Model 的情况下做到这一点?