如何在CQ对话框中延迟加载标签



如果一个页面分配了很多标签,加载对话框可能需要相当长的时间(最多20秒)。如果作者只想在多个页面上更改一些其他属性,这可能会变得相当烦人。问题是,是否有一种方法可以在对话框中延迟加载标签?

更准确地说,我说的是基于ExtJS的"经典UI"。

实际上有两种方法可以实现这一点,都是使用按钮来触发加载:

打开子对话框:

<button
    jcr:primaryType="cq:Widget"
    text="Open Tags Dialog"
    handler="function(button) {
        var parent = button.findParentByType('dialog');
        var dialog = CQ.WCM.getDialog(PATH_TO_DIALOG + '.infinity.json');
        dialog.setFormUrl(parent.form.url);
        dialog.loadContent(parent.form.url);
        dialog.show();
    }"
    xtype="button"/>

解释:处理程序在点击时被触发。它将加载子对话框,将提交url和数据源设置为与当前对话框相同的节点。

覆盖标签(按钮位于自己的标签中):

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
    jcr:primaryType="cq:Panel"
    title="Tags"
    extensionGet=".json"
    xtype="customcontentpanel">
    <items jcr:primaryType="cq:WidgetCollection">
        <button
            jcr:primaryType="cq:Widget"
            text="Load Tags"
            handler="function(button) {
                    var parent = button.findParentByType('panel');
                    var tabConf = CQ.shared.HTTP.eval(PATH_TO_TAB + '.infinity.json');
                    var tab = CQ.Util.formatData(tabConf);
                    for (var i=0; i&lt;tab.items.length; i++) {
                        parent.add(tab.items[i]);
                    }
                    parent.doLayout();
                    parent.loadContent();
                    parent.remove(button);
                }"
            xtype="button"/>
    </items>
</jcr:root>

说明:cq:Panel需要使用xtype="customcontentpanel"extensionGet=".json"。默认情况下,其他属性是从包含此面板的对话框继承的。CQ.shared.HTTP.eval加载JSON并将其转换为JavaScript对象。然后CQ.Util.formatData将XML属性(如jcr:primaryType)转换为xtype。然后迭代刚刚加载的选项卡配置中的所有元素,并将它们添加到当前选项卡中。由于这些小部件是在初始加载对话框之后添加的,因此需要再次调用doLayout()loadContent()。最后一步是删除按钮

最新更新