2014-10-15 3 views
0

Ive получил функцию, которая добавляет div в качестве дочернего элемента в dijit/layout/conentpane. Проблема, с которой я столкнулась, заключается в том, что после добавления этого div я не могу ссылаться на нее с помощью dom.byId: функция, которая создает этот div, вызывается из события щелчка элемента меню:dom.byId возвращает undefined после того, как элемент был добавлен

пункт меню:

<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

вы можете попробовать эти вещи

var test = dom.byId("tool",ContentContainer.domNode);

еще вы можете держать ссылку этого йот непосредственно this.tool = document.createElement("div");

еще использовать domconstruct апи, представленную в додзё

+0

Спасибо, что мне удалось получить ссылку, используя this.tool = document.createElement ("div"); Теперь я пытаюсь использовать его при создании нового виджета: WS = new WatershedMap ({}, this.tool); но я получаю не могу прочитать идентификатор свойства null? – pvitt

+0

вы можете предоставить обновленный код или настроить что-то в jsfiddle, скорее всего это будет проблема с областью, в которой вы создаете свой div и где вы создаете свой виджет, еще одна вещь вместо использования document.createelement попробуйте использовать domconstruct.create. Пожалуйста, предоставьте дополнительную информацию – mannyyysh

+0

Я использовал: this.tool = domConstruct.create ("div"); и получаю тот же результат. Я посмотрю, смогу ли я что-нибудь настроить на jsfiddle Спасибо – pvitt

1

Функция byId будет выполнять поиск DOM для элемента с данным идентификатором. Если ваш элемент инструмента фактически не был вставлен в DOM, когда вы вызываете byId, вы получите неопределенный.

Код, который вы показали, никогда не вставляет элемент инструмента в DOM, он только передает его на вызов ContentContainer.set("MainContent", tool). Убедитесь, что этот вызов фактически вставляет элемент инструмента в DOM немедленно. Входит ли ContentConainer в DOM при вызове byId?

+0

Спасибо - это помогает мне понять, что может быть. Смешно, что я использовал ту же самую методологию на событии щелчка дерева, и он отлично работал. – pvitt

Смежные вопросы