Какие методы я могу использовать для изменения порядка выполнения функций javascript?

Как изменить порядок выполнения функций javascript независимо от порядка включения.

Вопрос, который помогает, но не дает полного ответа на мой вопрос: Можно ли иметь несколько разделов $(document).ready(function()? (ответ положительный, и они выполняются в том порядке, в котором они добавляются в jQuery.ready()).

Я пытаюсь сделать так, чтобы мой javascript, выполнивший вход/не вошел в систему, знал для удобства уведомлений на моем BBG ninjawars.net . Я надеялся использовать простую систему, когда php на стороне сервера записывает вызов функции javascript setLoggedIn(), когда страница входит в систему, и записывает вызов clearLoggedIn(), когда страница просматривается при выходе из системы:

<head>
...
        <!-- All the global ninjawars javascript, defines the setLoggedIn(), clearLoggedIn(), and modifyPageLayout() functions and (currently) calls modifyPageLayout() within jQuery.ready() -->
 <script type="text/javascript" src="js/nw.js"></script>

 {if $logged_in} // Server-side check.
   <script type="text/javascript">
     <!--
      setLoggedIn();
     // -->
   </script>
 {else} // Server-side check found that the user was not logged in.
   <script type="text/javascript">
     <!--
      clearLoggedIn();
     // -->
   </script>
 {/if}
</head>

Проблемы:

На данный момент порядок такой:

  • глобально определить setLoggedIn() и clearLoggedIn() (в nw.js)

  • Добавьте код модификации страницы/информации, давайте назовем его ModifyPageLayout(), который должен быть проинформирован о входе/выходе из системы в jQuery.ready() (в nw.js)

  • Вызывайте встроенные функции setLoggedIn() или clearLoggedIn() в тегах скрипта на странице.

Я не знаю, как удостовериться, что вызовы setLoggedIn() или clearLoggedIn() происходят до того, как ModifyPageLayout() в настоящее время обернут в блок jQuery.ready() и, таким образом, будет выполняться всякий раз, когда загружается DOM.

  • Если бы я добавил setLoggedIn() и clearLoggedIn() в блоки jQuery.ready(), они бы выполнялись в том порядке, в котором они были добавлены, таким образом, порядок стал бы таким: modifyPageLayout(), затем setLoggedIn() или setLoggedOut(), так что все в блоках jQuery.ready() не выполняется. т выполнить намерение.

  • setLoggedIn() и clearLoggedIn() в настоящее время полагаются на код, определенный nw.js, поэтому я не могу вызывать их до включения nw.js.

Одно потенциальное решение:

Я мог бы отложить функциюmodifyPageLayout, написав ее так:

modifyFunction = modifyPageLayout; // Non-executed first-class function variable. (created in nw.js)

setLoggedIn(); // inline in the head of the page
modifyFunction(); // inline in the head of the page

У кого-нибудь есть другие решения?


person Kzqai    schedule 25.11.2009    source источник


Ответы (1)


Может я что-то пропустил, так что извините, если что.

Но для setLoggedIn() и clearLoggedIn() разве вы не хотите, чтобы они происходили каждый раз, когда кто-то щелкает, чтобы войти или выйти? Итак, вы можете добавить обработчик событий внутри документа. Готов справиться с этим.

Предположительно, тот факт, что что-то происходит, когда кто-то входит в систему или выходит из нее, можно использовать в функцииmodifyPageLayout, чтобы решить, что и как показывать.

В любом случае, я не уверен, что вопрос сложнее, чем этот

person George Sisco    schedule 25.11.2009
comment
Я действительно не вижу каких-либо полезных триггеров щелчка на стороне клиента, которые можно было бы использовать для запуска isLoggedIn(), потому что даже если они нажимают вход в систему, это может привести к неудачному входу в систему, что делает isLoggedIn() ложью. isLoggedIn() и clearLoggedIn() переключаются между сервером в зависимости от того, имеет ли php правильные учетные данные для входа в сеанс. Я постараюсь уточнить это в вопросе. - person Kzqai; 25.11.2009
comment
Может быть, тогда использовать document.ready, вызывающий setLoggedIn() и window.load для модификацииPageLayout()? Обсуждение различий здесь: 4loc.wordpress.com/2009/04. /28/documentready-vs-windowload - person George Sisco; 27.11.2009
comment
Думаю, все отзывы я получу. - person Kzqai; 04.01.2010