宏組件的動態創建一個ID我想創建兩個網格,其無需複製網格代碼的代碼執行兩次完全相同的功能。所以,我決定使用一個宏組件。但是,我不確定如何動態地在宏組件中創建組件的ID。該代碼執行以下操作:使用參數
第一格柵(西部區域)具有兩排,兩個文本框。如果我將「hello」添加到此網格中的第一個文本框,那麼第二個文本框的值也設置爲「hello」。
第二格柵(中心區)具有兩排,兩個文本框。如果我在這個網格中添加「世界」的第一個文本框,然後在第二個文本框的值也被設定爲「世界」
- 在第一網格中的兩個文本框的值現在是相同的,即「你好」
- 在第二格兩種文本框的值是現在相同,即「世界」
我創建了我用宏組件像這樣一個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>
無的工作原理。我不確定如何動態創建宏組件中的組件的ID。第一個網格的文本框標識必須是「newBox1」,「duplicateBox1」,第二個網格的文本框標識必須是「newBox2」,「duplicateBox2」
請指出是否有更好的方法來完成此任務。
感謝, 索尼