CQ5,动态设置' defaultValue'在使用extjs的组件对话框中?

时间:2014-11-21 11:05:15

标签: extjs dialog content-management-system components cq5

我的组件对话框中有一个选择框,有四个选项:

  • 默认
  • 插件
  • 重写

在对话框中,我希望动态设置defaultValue属性为“关闭”。或者'默认'根据URL路径是否包含某些字符。这可能吗?

以下是我尝试过的侦听器的dialog.xml片段:

<extra_meta_description_tag_mode
    jcr:primaryType="cq:Widget"
    defaultValue=""
    fieldLabel="SEO Description Usage"
    name="./extraMetaDescriptionTagMode"
    type="select"
    xtype="selection">    
        <listeners
            jcr:primaryType="nt:unstructured"
            defaultValue="function(url) {
                url.contain("en_gb/news") ? return "default" : return "off"; 
            }"/>
        <options jcr:primaryType="cq:WidgetCollection">
            <off
                jcr:primaryType="nt:unstructured"
                text="Off"
                value="off"/>
            <default
                jcr:primaryType="nt:unstructured"
                text="Append pre-set text"
                value="default"/>
            <addon
                jcr:primaryType="nt:unstructured"
                text="Append input text"
                value="addon"/>
            <over_write
                jcr:primaryType="nt:unstructured"
                text="Overwrite"
                value="overwrite"/>
        </options>
</extra_meta_description_tag_mode>

2 个答案:

答案 0 :(得分:4)

监听器只能有事件值,defaultValue不是一个。您可以使用loadContent事件,该事件在对话框加载时触发。 CQ.WCM.getPagePath()将提供当前页面路径:

<listeners
    jcr:primaryType="nt:unstructured"
    loadcontent="function(selection,record,path) {
        var currentPath = CQ.WCM.getPagePath();
        if(currentPath.indexOf('en_gb/news')!=-1)
        {  
            selection.setValue('default');
        } else { 
            selection.setValue('off');
        }"/>

这会在每次加载对话框时重置该值,因此如果用户已覆盖默认值,您将添加条件以防止它。

答案 1 :(得分:0)

您还可以为组件提供一个itemId属性,其值为:&#34; extra_meta_description_tag_mode&#34;然后编写一个ExtJS插件并将其注册为xtype:&#34; selection&#34;在插件的init方法中,根据当前页面路径设置defaultValue属性。