Как изменить порядок выполнения функций 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
У кого-нибудь есть другие решения?