从模板文件(DOJO)中的嵌套元素访问自定义小部件

时间:2011-02-24 19:42:02

标签: dojo

我在小部件中使用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按钮所在的小部件的父级。任何帮助都将非常感激。谢谢!

2 个答案:

答案 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个事件的多个处理程序,你可以更好地控制交互,你不会丢弃你的标记与可能改变的函数的名称(更好地分离关注点...... ...