我们可以使用javascript包含cq组件(带对话框)吗?

时间:2015-07-07 07:03:21

标签: cq5 aem

我们可以通过添加

在新组件中包含现有组件
    <cq:include path="" resourceType="" />

是否可以使用javascript实现相同的目标?

像,

 var temp    =    "<cq:include path='sometext' resourceType='existing/component/path' />"

  if(some condition){

        $("#somediv").append(temp);

}

上面的代码只是一个例子。我遇到的情况是我必须使用javascript来包含现有组件。

建议请。

谢谢,

2 个答案:

答案 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,所以你不应该将它们包含在组件中,而是包含在包含该组件的页面上)。

  1. 根据需要创建组件。
  2. CQ.HTTP.post(pathToWhereItShouldBe + "/nodeName", null, {
      "jcr:primaryType" : "nt:unstructured",
      "sling:resourceType" : "some/type"
    });

    1. 获取此组件的内容。
    2. 像这样:

      var comp = CQ.shared.HTTP.get(pathToWhereItShouldBe + "/nodeName")

      1. 将html代码放在页面上的某个位置
      2. 将侦听器(例如双击)添加到此组件,该组件将使用函数打开对话框。
      3. 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);
        	}
        }