Javascript dojo-小部件在第一个实例上未正确显示

Javascript dojo-小部件在第一个实例上未正确显示,javascript,dojo,widget,Javascript,Dojo,Widget,我一直在使用,包括其他一些。当我创建它的一个实例时,它出现了,但只显示了基本的模板元素,在仔细检查下,菜单小部件还没有被添加。然后,当我创建第二个实例时,(通过单击按钮),它会正确显示,包括菜单 这真让我困惑,有什么想法吗 顺便说一下,我正在小部件实例上调用startup() 这是我的模板的代码 <div class="${!baseClass}ConfigPanel"> <div data-dojo-attach-point="heading">Conf

我一直在使用,包括其他一些。当我创建它的一个实例时,它出现了,但只显示了基本的模板元素,在仔细检查下,菜单小部件还没有被添加。然后,当我创建第二个实例时,(通过单击按钮),它会正确显示,包括菜单

这真让我困惑,有什么想法吗

顺便说一下,我正在小部件实例上调用startup()

这是我的模板的代码

<div class="${!baseClass}ConfigPanel">
        <div data-dojo-attach-point="heading">Configure data</div>
        <div id="menuContainer" data-dojo-attach-point="menu"></div>
</div>

好的,我已经找到了答案,这是小部件生命周期的问题,这句直接来自dojo的话应该有助于解释

启动()

Dijit生命周期中第二个最重要的方法可能是 启动方法。此方法设计用于处理后处理 任何DOM片段都已实际添加到文档中;事实并非如此 在创建任何潜在的子窗口小部件并 也开始了。这对于复合窗口小部件以及 布局小部件

因此,我试图引用一个没有添加到文档中的dom元素

为了修复我的代码,我只需将创建菜单小部件的代码从postreate()方法移动到startup()方法,问题解决了,下面是显示更改的代码片段

//return a new widget class
        return declare([WidgetBase, TemplatedMixin], {
            templateString: template,
            baseClass: "plumePlots",

            //when dom structure is ready but before page insertion
            postCreate: function(){             
                //run all parent postCreate functions
                this.inherited(arguments);
            },

            startup: function(){  // added startup function
                var menuNode = this.menu; // code moved to here
                buildMenu(menuNode.id, _menuData); // and here
            }
        });
//return a new widget class
        return declare([WidgetBase, TemplatedMixin], {
            templateString: template,
            baseClass: "plumePlots",

            //when dom structure is ready but before page insertion
            postCreate: function(){             
                //run all parent postCreate functions
                this.inherited(arguments);
            },

            startup: function(){  // added startup function
                var menuNode = this.menu; // code moved to here
                buildMenu(menuNode.id, _menuData); // and here
            }
        });