我在小部件中使用dijit小部件和小部件时遇到了一个有趣的问题。我有一个自定义小部件,我创建了一个带有表单的dijit.dialog。这是一个样本
<div dojoattachpoint="WorkinProgress">
<div dojoType="dijit.Dialog" id="formDialog" title="Agent Note" >
<table>
<tr>
<td>
<label for="desc">
Description:
</label>
</td>
<td>
<input dojoType="dijit.form.Textarea" style="width:400px" type="text" name="desc" id="desc">
</td>
</tr>
<tr>
<td align="center" colspan="2">
<button dojoType="dijit.form.Button" type="submit" dojoattachevent="onclick: createNote >
SAVE
</button>
<button dojoType="dijit.form.Button" type="button" onClick="dijit.byId('formDialog').hide();">
CLOSE
</button>
</td>
</tr>
</table>
正如您所见,对话框嵌套在WorkInProgress小部件中。对话框本身中的表单需要能够调用WorkInProgress小部件中的函数,以将表单的数据发布到Web服务。我尝试过使用dojoattachevent但是没有得到任何地方。我如何从我的模板文件中访问dojo按钮所在的小部件的父级。任何帮助都将非常感激。谢谢!
答案 0 :(得分:1)
如果要动态添加子窗口小部件,请尝试使用dijit._Widget.placeAt函数将DOM节点包含在其中。显然,只需将HTML字符串添加到父窗口小部件,只会添加子窗口小部件的根DOM(在您的情况下,第二个div)。完成后,您应该能够从dojoAttachPoint等获取父信息
答案 1 :(得分:0)
为什么不给出按钮,对话框和最外面的小部件dojoAttachPoint属性,然后在自定义小部件的postCreate函数中执行以下操作:
dojo.connect(this.createNoteButton, "onclick", this, this._createNoteHandler);
然后在自定义窗口小部件上创建一个名为“_createNoteHandler”的函数,并执行您需要执行的操作。 这种方法的优点是你可以使用pub / sub而不是dojo.connect为1个事件的多个处理程序,你可以更好地控制交互,你不会丢弃你的标记与可能改变的函数的名称(更好地分离关注点...... ...