dojo - 如果尚未添加到dom中,如何通过Id获取节点?

时间:2013-06-03 16:01:00

标签: javascript templates dom dojo

我正在处理包含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对象),我可以'通过#printLayersdom.byId访问dojo/query

如何在模板中访问#printLayers以动态添加option元素?

1 个答案:

答案 0 :(得分:1)

事实证明,解决方案与操作顺序有关。我无法使用dom节点,因为它尚未添加到dom中。它只是一个javascript对象。创建Dialog并将dom节点设置为content的{​​{1}}后,dom节点已添加到dom中,我可以使用{{1}访问Dialog }}