インクルードの順序とは関係なく、JavaScript関数の実行順序を並べ替える方法。
役立つ質問ですが、私の質問に完全には答えていません: 複数の$(document).ready(function()セクションを作成できますか?(答えは「はい」で、jQuery.readyに追加された順序で実行されます) ())。
便利な通知の目的で、BBGninjawars.netでjavascriptがログイン/ログインしていないことを認識できるようにしようとしています。setLoggedIn()
私は、サーバー側のphpがページのログイン時にjavascript関数呼び出しを書き出し、ログアウト中にページ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()の呼び出しが、現在jQuery.ready()ブロックにラップされているmodifyPageLayout()の前に発生し、DOMが読み込まれるたびに実行されることを確認する方法がわかりません。
setLoggedIn()およびclearLoggedIn()をjQuery.ready()ブロックに追加した場合、それらは追加された順序で実行されるため、順序は次のように
modifyPageLayout()
なりsetLoggedIn()
ますsetLoggedOut()
。意図。setLoggedIn()とclearLoggedIn()は現在、コードで定義されたnw.jsに依存しているため、nw.jsを含める前にそれらを呼び出すことはできません。
1つの潜在的な解決策:
次のように記述することで、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
誰か他の解決策がありますか?