Dojo:对话框刷新TabContainer中的dojox.layout.ContentPane



我在InternetExplorer7/8中遇到Dojo问题(这在Firefox中运行良好)。

基本上,我有一个选项卡容器,里面有很多选项卡(这些是dojox.layout.ContentPane的)。在其中一个选项卡上,我想有一个"注释框",它会弹出一个对话框,要求用户在其中添加一些内容。然后,通过调用后端来保存注释,我希望重新加载选项卡以显示新的注释。

我的保存按钮的逻辑是这样的:

<button data-dojo-type="dijit.form.Button" type="button" data-dojo-props="iconClass:'dijitIcon dijitIconSave', showLabel: true" title="Add your comment">Add Comment
    <script type="dojo/on" data-dojo-event="click" data-dojo-args="evt">
      require(["dojo/dom"], function(dom)
      {
        var tText = dijit.byId('comment_70').get('value');
        if (tText == '')
        {
          alert('You have not entered any comment');
          return;
        }
        var tJSONRPC = new JSONRpcClient('JSON-RPC');
        try
        {
          tJSONRPC.be.addComment('70', tText);
          var tTab = dijit.byId('Detail_70');
          tTab.refresh();
        }
        catch (Ex)
        {
          alert(Ex);
        }
      });
    </script></button>

看起来并不是很费力(末尾的70是ID,这样用户就可以同时打开多个ID,因此也可以打开选项卡)。

如前所述,这在Firefox中运行良好,但在IE 8/7中则不然,它在dojo(_32.focus())中的一些生成代码中引发错误;准确地说),我在调试控制台中得到的错误消息是"对方法或属性访问的意外调用"

用你的tTab.refresh();:行试试这个

setTimeout(function() { tTab.refresh(); }, 0); // whenIdle

几乎不可能判断抛出的异常来自哪里——您应该使用开发dojo-1.M.M-src/dojo/dojo.js代码来扩展优化的函数和变量名(以及调试后的有用注释)。

上述原因是为了消除在处理按钮onclick焦点事件时发生的异常(刷新将删除选项卡中的DOM和按钮)

最新更新