dojo addOnLoad / ready不适用于对话框

时间:2012-06-05 13:01:56

标签: dojo

因此,dojo.addOnLoaddojo.ready函数似乎不适用于对话框。

我正在寻找其他选择。问题是我的对话框HTML是动态创建的,包含许多不同的脚本块,每个脚本块都使用dojo.connect函数来添加功能。例如,我有:

<input type='checkbox' name='value(liquid40011252)'  value='1' dojoType='dijit.form.CheckBox' id='liquid4001125249' />
 <script type='text/javascript'>dojo.addOnLoad(function() {
    dialogConnect4001125249();});
    function dialogConnect4001125249() { 
        dojo.connect(dijit.byId('liquid4001125249'), 'onChange', 
         function(){
           // my code for toggling checkboxes ets
         });
    }
  </script>

这在普通网页中运行良好,但在对话框中addOnLoad未得到尊重且dijit.byId('liquid4001125249')未定义。 ready无效。

我用

实例化对话框
searchDlg = dojox.widget.DialogSimple();
searchDlg.set("title", title);
searchDlg.set("style", "width: " + width + "px; max-height: "+height+"px; overflow:auto;");
searchDlg.set("content", content);
searchDlg.show();

并考虑在dialogConnect之后调用show,但有很多dialogConnectxxxxx我没有列表。

也许另一种方法是以某种方式在某处添加dialogConnect的列表 - 可能在对话框本身上。不确定。

关于如何解决这个复杂问题的任何想法?

1 个答案:

答案 0 :(得分:0)

在您的情况下,只有在执行searchDlg...代码后才存在对话框。 dijit.byIdaddOnLoad例程中找不到它们是正常的。

我真的不知道你想在connectDialog函数中做什么,但我认为通过继承Dialog并使用postCreate方法连接到对话框,你将获得可读性。

dojo.declare("mynamespace.MyCustomDialog", [dijit.Dialog], {

    templateString: dojo.cache("mynamespace", "templates/MyCustomDialog.html"),
    widgetsInTemplate: true,

    postCreate: function()
        {
        // do whatever dojo.connect you need
        },

    });