Заполнение опций блока выбора при изменении поля пути в диалоге 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