2013-11-29 3 views
0

мой HTML:функция Dojo называется в HTML

<html> 
    <head> 
      <script src="dojo/dojo.js"></script> 
      <script src="app/my.js"></script> 
      <script> 
       handleResult(<%server response data%>); 
      </script> 
    </head> 
    <body> 
      <div id="data"></div> 
    </body> 
</html> 

мои JS:

require(["dojo/_base/Array"],function(Array){ 
    handleResult = function(data){ 
     Array.forEach(data,function(item,index){ 
       //Process the data 
     }); 
    } 
}); 

При загрузке страницы звоните handleResult, я получаю сообщение об ошибке:

Uncaught ReferenceError: test is not defined 

Но я могу получить эту функцию в firebug window.handleResult , пожалуйста, помогите мне .thank.

+0

Работы для меня: [скрипка] (http://jsfiddle.net/97QKd/). – Sirko

ответ

1

НЕ используйте onclick, пожалуйста.

require(["dojo/on", "dojo/dom"],function(dom) { 
    var button = dom.byId("demo")); 
    on(button, "click", function(evnt) { 
     console.log(evnt); 
    }) 
}); 
+0

это пример. – SeanSnow

+0

И функция «test», используемая в onClick, не находится в правильном контексте и поэтому не найдена. Используя обработку событий onjo в dojo, функция ** ** находится **, поэтому это решает вашу проблему. Пожалуйста, используйте это. –

0

Функция require является асинхронной. Вы не можете определить глобальную переменную изнутри требуемого обратного вызова, а затем попытаться немедленно получить к ней доступ. Вы также никогда не должны определять глобальные значения, это один из основных принципов AMD. Ваша архитектура приложения неверна и никогда не будет работать. Вам необходимо использовать вызов AJAX для запроса «данных ответа сервера» после загрузки приложения на клиент и не пытаться делать то, что вы делаете.

+0

спасибо, я могу использовать синхронный AJAX. – SeanSnow

+1

NO. НЕ используйте синхронный вызов Ajax, *** EVER ***. Он полностью висит в пользовательском интерфейсе. Исправьте свой код для правильной работы с асинхронными операциями. –

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