我有一个将div作为孩子添加到dijit / layout / conentpane的函数。我遇到的问题是,在我添加这个div之后,我无法通过使用dom.byId来引用它:创建此div的函数是从menuitem的click事件中调用的:
菜单项:
<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。任何帮助都将非常感激。
由于
答案 0 :(得分:1)
byId
函数将在DOM中搜索具有给定id的元素。如果在调用byId
时您的工具元素实际上没有插入DOM,您将得到未定义。
您显示的代码实际上从未将工具元素插入DOM,只会将其传递给ContentContainer.set("MainContent", tool)
调用。请务必检查此调用是否实际将工具元素立即插入DOM中。当您致电byId
时,ContentConainer本身是否已插入DOM?
答案 1 :(得分:0)
你可以试试这些东西
var test = dom.byId("tool",ContentContainer.domNode);
否则你可以直接拿到这个dom的引用
this.tool = document.createElement("div");
否则使用dojo中提供的domconstruct api