2014-10-15 2 views
0

У меня возникла проблема с вызовом функции onClick для пункта меню dijit. Я получаю, что функция не определена:с использованием именованной функции для onclick пункта меню dijit

Вот код для пункта меню:

... 
<div data-dojo-type="dijit/DropDownMenu" id="fileMenu"> 
      <div data-dojo-type="dijit/MenuItem" data-dojo-props="onClick:function(){SetPage('test');}">Watershed</div> 
     </div> 

и вот функция, которую я пытаюсь позвонить:

function SetPage(pg){ 
alert(pg); 
} 

у меня есть зарегистрировать событие onclick в коде?

Thanks

ответ

1

Это звучит как проблема. Даже когда функция названа, она должна быть доступна в глобальной области, чтобы она могла работать с декларативным кодом.

Например, если вы поместили эту функцию внутри блока require(), это не сработает, поскольку оно ограничено только этой функцией (оно видимо только внутри).

Например:

require(["dijit/MenuItem", "dijit/DropDownMenu", "dojo/parser"], function() { 
    function SetPage(pg) { 
    alert(pg); 
    }; 

    SetPage("test"); // This will work because it's in the same scope 
}); 

SetPage("test"); // This will not work 

Чем ниже SetPage() вызова имеет другой масштаб, так что он не может видеть функцию. Чтобы решить эту проблему, функция должна быть определена в глобальной области (которая представляет собой для веб-приложений).

Возможное решение будет:

require(["dijit/DropDownMenu", "dijit/MenuItem", "dojo/parser"], function() { 
    window.SetPage = function(pg) { 
    alert(pg); 
    }; 
}); 

Это будет работать, потому что вы добавляете его к window объекта. Вы можете увидеть пример этого на JSFiddle.

2

это вопрос из сферы как setpage не в рамках OnClick функции меню можно вызвать функцию непосредственно оповещения внутри этого, как показано ниже:

<div data-dojo-type="dijit/DropDownMenu" id="fileMenu"> <div data-dojo-type="dijit/MenuItem" data-dojo-props="onClick:function(){alert('test';}">Watershed</div> </div>

или вы можете сделать прикрепить событие обработчик здесь:

<div data-dojo-type="dijit/DropDownMenu" id="fileMenu"> <div data-dojo-type="dijit/MenuItem" data-dojo-props="onClick:_onClick">Watershed</div> </div>

и в вашем файл JavaScript

_onClick:function(evt){this.SetPage(evt);}, SetPage:function(evt){ alert(evt.target.innerHTML);}

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