我正在处理包含dojo
的自定义Dialog
小部件。 Dialog
内容将作为模板html
文件中的文本加载。我遇到的问题是,在将Dialog
添加到dom之前,我需要将dom节点添加到Dialog
内容。
这是我的模板(DialogContent.html
):
<div>
<table>
<tbody>
<tr>
<td>
<label for="printTitle">Map Title:</label>
</td>
<td>
<input id="printTitle" data-dojo-type="dijit/form/TextBox" name="title" />
</td>
</tr>
<tr>
<td>
<label for="printOrientation">Page Orientation:</label>
</td>
<td>
<select id="printOrientation" data-dojo-type="dijit/form/FilteringSelect" name="orientation">
<option value="Letter ANSI A Landscape">Landscape</option>
<option value="Letter ANSI A Portrait">Portrait</option>
</select>
</td>
</tr>
<tr>
<td>
<label for="printUnits">Scale Bar Units:</label>
</td>
<td>
<select id="printUnits" data-dojo-type="dijit/form/FilteringSelect" name="units">
<option value="Miles">Miles</option>
<option value="Kilometers">Kilometers</option>
<option value="Feet">Feet</option>
<option value="Meters">Meters</option>
</select>
</td>
</tr>
<tr>
<td>
<label for="printLayers">Layers to Include in Legend:</label>
</td>
<td>
<select id="printLayers" data-dojo-type="dijit/form/MultiSelect" name="layers"></select>
</td>
</tr>
</tbody>
</table>
<div>
<button data-dojo-type="dijit/form/Button" type="submit">OK</button>
</div>
</div>
然后我使用define([...,...,...,"dojo/text!./PrintWidget/templates/DialogContent.html"]...)
这是一个字符串变量,但我需要动态添加#printLayers
下的选项。因为它只是一个文本字符串,所以我无法将其作为dom节点使用。当我使用domConstruct.toDom(dialogContent)
时,它会转换为我可以使用的实际dom节点,但由于此时dom节点实际上并未添加到DOM(它只是一个javascript dom对象),我可以'通过#printLayers
或dom.byId
访问dojo/query
。
如何在模板中访问#printLayers
以动态添加option
元素?
答案 0 :(得分:1)
事实证明,解决方案与操作顺序有关。我无法使用dom节点,因为它尚未添加到dom中。它只是一个javascript对象。创建Dialog
并将dom节点设置为content
的{{1}}后,dom节点已添加到dom中,我可以使用{{1}访问Dialog
}}