Заполнение опций блока выбора при изменении поля пути в диалоге Adobe cq5

В одном из моих диалогов у меня есть поле с xtype "pathfield". В зависимости от значения этого поля, я хочу изменить параметры "select-box" (xtype="selection",type="select").

Я использовал слушателей и добавил функцию для событий "change" и "dialogclose" для поля "pathfield".

Я могу вызвать сервлет, и он отправляет ответ JSON с параметрами, однако я не могу заполнить поле выбора этими параметрами.

Ниже приведен код файла dialog.xml

<select-product jcr:primaryType="cq:Widget"
                fieldDescription="Select Product (Product Details Page)"
                fieldLabel="Select Product" 
                height="{Long}40" key="productPath"
                name="./productPath" 
                style="height:21px" 
                width="{Long}350"
                rootPath="/content/MY_MSM_PATH" 
                xtype="pathfield">

    <listeners jcr:primaryType="nt:unstructured"
        change="function(){ var selectBox=$('select[name=features]');
        $.getJSON('/bin/featuresservlet?path=' + this.value, 
            function(jsonData){
                $.each(jsonData, function(i,data){
                    $('<option>').val(data.value).text(data.name).appendTo('select[name=features]');
                });
        }); }"

        dialogclose="function(){ 
            var selectBox=$('select[name=features]');
            $.getJSON('/bin/featuresservlet?path=' + this.value, function(jsonData){
                $.each(jsonData, function(i,data){
                    $('<option>').val(data.value).text(data.name).appendTo('select[name=features]');
                });
            }); }" />

</select-product> 

<features jcr:primaryType="cq:Widget" 
          fieldLabel="Select Features:"
          key="features" 
          name="./features" 
          type="select" 
          xtype="selection" />

1 ответ

Решение

Вы можете использовать метод set options выбора xtype. Измените ваш слушатель на что-то вроде этого

dialogclose="function(pathfield){ 
        var dialog = pathfield.findParentByType('dialog');
        var selectBox = dialog.findByType('selection')[0]; //assuming this is the only selection you have
        $.getJSON('/bin/featuresservlet?path=' + this.value, function(jsonData){
            selectBox.setOptions(jsonData);
            selectBox.doLayout(flase,false);
        }); }" 

Данные, возвращаемые вашим сервлетом, должны иметь следующий формат:

[
 {
    "value": "valueOfOption1",
    "text": "textOfOption1"
 },
 {
    "value": "valueOfOption2",
    "text": "textOfOption2"
 }

]

Ссылка: http://dev.day.com/docs/en/cq/5-6/widgets-api/index.html?class=CQ.form.Selection

Другие вопросы по тегам