Я пытаюсь создать две сетки, которые выполняют одну и ту же функцию, не дублируя код кода для сетки дважды. Итак, я решил использовать макрокомпонент. Но я не уверен, как динамически создавать идентификаторы компонентов в макрокомпоненте. Код делает следующее:
Первая сетка (западный регион) состоит из двух строк с двумя текстовыми полями. Если я добавлю «привет» в первое текстовое поле в этой сетке, то значение второго текстового поля также будет установлено в «привет».
Вторая сетка (центральная область) имеет две строки с двумя текстовыми полями. Если я добавлю «мир» в первое текстовое поле в этой сетке, то значение второго текстового поля также будет установлено на «мир»
- Значения обоих текстовых полей в первой сетке теперь совпадают, т. Е. "Привет"
- Значения обоих текстовых полей во второй сетке теперь одинаковы, то есть "мир"
Я создал файл zul, в котором я использую макрос-компонент примерно так:
<?component name="mygrid1" macro-uri="grid1.zul" inline="true"?>
<zk>
<vbox hflex="1">
<borderlayout height="500px" width="500px">
<west size="50%">
<mygrid1 id="grid1" index="1" />
</west>
<center>
<mygrid1 id="grid2" index="2" />
</center>
</borderlayout>
</vbox>
</zk>
<zscript>
fillInDuplicateBox(String value, Textbox duplicateBox) {
if (!"".contentEquals(duplicateBox.value))
return;
duplicateBox.value = value;
}
</zscript>
</window>
Макрокомпонент показан ниже:
<zk>
<vbox hflex="1">
<grid width="300px">
<rows>
<row> Box 1: <textbox id="${concat("newBox", arg.index)}" onChange="fillInDuplicateBox(${concat("newBox, arg.index)}.value, ${concat("duplicateBox", arg.index)})" hflex="1" /></row>
<row> Box 2: <textbox id="${concat("duplicateBox", arg.index)}" hflex="1" /></row>
</rows>
</grid>
</vbox>
</zk>
Я также попробовал следующий код для создания макрокомпонента
<zk>
<vbox hflex="1">
<grid width="300px">
<rows>
<row> Box 1: <textbox id="newBox${arg.index}" onChange="fillInDuplicateBox(newBox${arg.index}.value, duplicateBox${arg.index})" hflex="1" /></row>
<row> Box 2: <textbox id="duplicateBox${arg.index}" hflex="1" /></row>
</rows>
</grid>
</vbox>
</zk>
Ничего из этого не работает. Я не уверен, как динамически создавать идентификаторы компонентов в макрокомпоненте. Идентификаторы текстового поля первой сетки должны быть «newBox1», «duplicateBox1», а идентификаторы текстового поля второй сетки должны быть «newBox2», «duplicateBox2»
Укажите, есть ли лучший способ решения этой задачи.
Спасибо,
Sony