2013-06-03 33 views
0

我正在制定包含Dialog的自定义dojo小部件。 Dialog内容作为来自模板html文件的文本加载。我遇到的问题是在将Dialog添加到dom之前,我需要将dom节点添加到Dialog内容中。dojo - 如果没有添加到dom中,如何通过Id获取节点?

这里是我的模板(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.byIddojo/query

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

+1

然后你可以在你的小部件中访问它this.printLayers – Marius

+0

@Marius - 出于某种原因,我假设我无法为此使用'data-dojo-attach-point',因为它实际上不是小部件本身的模板,而是一个窗口小部件打开的“Dialog”模板。现在思考它,它并没有真正有所作为。谢谢。 – Brian

回答

1

事实证明,解决方案与操作顺序有关。我无法使用dom节点,因为它尚未添加到dom中。这只是一个javascript对象。一旦我创建了Dialog并将0123节点设置为contentDialog,则dom节点被添加到dom中,并且我可以使用dom.byId("printLayers")访问#printLayers

相关问题