Не удается получить доступ к элементу из именованной функции JavaScript - PullRequest
3 голосов
/ 01 апреля 2012

У меня есть функция javascript, которая прекрасно работает, если она анонимная, но перестает работать, когда я изменяю ее на именованную. Почему?

вот код, который работает:

setInterval( function(){
<% @root.children.all(:order  => "idx DESC").each do |child| %>
        var text2 =    "<%= child.content %>";
      var pjs = Processing.getInstanceById("mysketch2");
    pjs.update(text2);
    <% end %>

}, 3000)

Вот код, который не работает ..

<script>
  var interval = setInterval(drawGraph(),1000);
    function drawGraph(){
  <% @root.children.all(:order  => "idx DESC").each do |child| %>
        var text2 =    "<%= child.content %>";
        var pjs = Processing.getInstanceById("mysketch2");
        pjs.update(text2);
      <% end %>

     }

</script>

Я получаю 'Uncaught TypeError: Невозможно вызвать метод' update 'of undefined'. Самым странным является то, что я вижу, что окно Processing.js рисуется на экране, но это все. С рабочей версией (первой в этом посте) все в порядке, и содержимое окна также рисуется ..

Я пытался поместить pjs в глобальную переменную вне функции drawGraph (), но не повезло ... Что мне не хватает? Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

Два фрагмента кода не эквивалентны: в первом вы передаете функции setInterval ссылку на неназванную функцию. Во втором фрагменте вы вызываете drawGraph () и затем передаете значение результата в setInterval.

Попробуйте с:

var interval = setInterval(drawGraph, 1000);

и переместите определение drawGraph перед вызовом setInterval.

2 голосов
/ 01 апреля 2012

должно быть

setInterval(drawGraph,1000);

не

setInterval(drawGraph(),1000);

Также функция должна быть объявлена ​​перед оператором setInterval

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...