我有一个函数,它将div作为子项添加到dijit/layout/conentpane中。我遇到的问题是,添加这个div后,我无法使用dom.byId引用它:创建这个div的函数是从菜单项的点击事件调用的:
菜单项:
<div id="miLMWS" data-dojo-type="dijit/MenuItem" data-dojo-props="onClick:function(){SetPage('LMWS');}">Watershed</div>
onclick函数(SetPage):
....
function (dom, parser, registry, ready, WatershedMap, OWOWMapGallery) {
window.SetPage = function (pg) {
//set the page depending on the menu item clicked
ClearWidget();//destroys previous widget deleting the div
AddToolDiv();//add the div
switch (pg) {
case 'LMWS':
var test = dom.byId("tool"); //this is undefined
//WS = new WatershedMap({}, "tool");
break;
}
};
...
addDivFunction:
function AddToolDiv() {
//add page div (node where template will be placed in
var tool = document.createElement("div");
tool.setAttribute("id", "tool");
var ContentContainer = registry.byId("MainContent");
ContentContainer.set("MainContent", tool);
var test = dom.byId("tool");//this is undefined
}
每次单击菜单项时,都会有一个新的自定义小部件加载到工具div中。(有一个函数ClearWidget会破坏旧的小部件和工具div)我想这可能与从onClick事件调用该函数有关?当我在页面第一次加载时调用AddToolDiv时,测试变量正确地引用了工具div。任何帮助都将不胜感激。
感谢
byId
函数将在DOM中搜索具有给定id的元素。如果在调用byId
时您的工具元素实际上还没有插入到DOM中,则会得到未定义的结果。
您所展示的代码实际上从未将tool元素插入到DOM中,它只将其传递给ContentContainer.set("MainContent", tool)
调用。请确保检查此调用是否立即将tool元素插入到DOM中。当您调用byId
时,ContentConainer本身是否插入到DOM中?
你可以试试
var test = dom.byId("tool",ContentContainer.domNode);
否则您可以直接持有该dom的引用this.tool = document.createElement("div");
否则使用dojo 中提供的domconstruct api