我们可以通过添加
在新组件中包含现有组件 <cq:include path="" resourceType="" />
是否可以使用javascript实现相同的目标?
像,
var temp = "<cq:include path='sometext' resourceType='existing/component/path' />"
if(some condition){
$("#somediv").append(temp);
}
上面的代码只是一个例子。我遇到的情况是我必须使用javascript来包含现有组件。
建议请。
谢谢,
洁
答案 0 :(得分:1)
我假设您指的是客户端JavaScript。如果这是服务器端JavaScript,那么您可以使用Sightly和JavaScript Use Objects的组合来执行此操作。
在创作环境中执行此操作通常并不实际,因为它涉及对可编辑的攻击,并且通常会使创作体验更加复杂。在发布环境中执行此操作当然是可能的(而且非常简单)。
在发布中,你会做这样的事情(使用jQuery):
if (some condition){
$("#somediv").load("<%= resourceResolver.map(request, currentResource.getPath() + "/sometext.html")) %>);
}
以
的形式发送if (some condition){
$("#somediv").load("/content/path/to/page/_jcr_content/sometext.html")) %>);
}
这将对/content/path/to/page/_jcr_content/sometext.html发出AJAX请求,并使用内容将div替换为提供的ID。
答案 1 :(得分:1)
不知道动态显示它的简单方法。可能包含组件会更容易,但在某些情况下隐藏它?
下一种方法有几个缺点(比如没有下载的clientlibs,所以你不应该将它们包含在组件中,而是包含在包含该组件的页面上)。
CQ.HTTP.post(pathToWhereItShouldBe + "/nodeName", null, {
"jcr:primaryType" : "nt:unstructured",
"sling:resourceType" : "some/type"
});
像这样:
var comp = CQ.shared.HTTP.get(pathToWhereItShouldBe + "/nodeName")
function doOpenDlg(url, path) {
var d = CQ.WCM.getDialog(url);
var reloadPage = true;
if(d) {
if( reloadPage ) {
d.success = function(form, action) {
CQ.Util.reload(CQ.WCM.getContentWindow());
};
}
d.show();
d.loadContent(path);
}
}