11

鶏が先か卵が先かという問題に遭遇し、論理的な解決策があると思います。しかし、他の人が似たようなものに遭遇したに違いないと思ったので、大衆のためにそこに浮かぶと思いました。

状況は、DOMがクライアント側でレンダリングを完了した後に実行する必要があるいくつかのコールバックをキューに入れるためにdojoのaddOnLoad関数を使用したいということです。だから私がしていることは次のとおりです:

<html>
    <head>
        <script type="text/javascript" src="dojo.xd.js"></script>
        ...
    </head>
    <body>
        ...
        <script type="text/javascript">
            dojo.addOnLoad( ... );
            dojo.addOnLoad( ... );
            ...
        </script>
    </body>
</html>

さて、問題は、Dojoライブラリ全体がブラウザにダウンロードされる前にdojo.addOnLoadを呼び出しているように見えることです。DOM全体がロードされるに(そして通常のbody onloadコールバックがトリガーされる前に)インラインSCRIPTコンテンツを実行する必要があるため、これはある意味で理にかなっています。

私の質問はこれです-私のアプローチサウンドです、または関数を呼び出すために通常/標準のボディオンロードJavaScriptコールバックを登録する方が理にかなっています。これは各dojo.addOnLoadsがSCRIPTブロックで実行しているのと同じ作業を行います。もちろん、これは疑問を投げかけます。ライブラリを使用する前にDojoライブラリがロードされることが保証されていないのに、なぜdojo.addOnLoadを使用するのでしょうか。

うまくいけば、この状況は私以外の誰かにとって理にかなっています。他の誰かがこの状況に遭遇した可能性があるようです。

考え?

よろしく、アダムライス

4

2 に答える 2

13

あなたはそれを正しくやっています。外部Javascriptファイルは順番にロードされて同期的に実行されるため、dojo.addOnLoad( ... );Dojoに到達するまでにロードされています。次の2つの理由dojo.addOnLoadで代わりに使用してください。window.onload

  • DOMContentLoadedを利用しているため、早く起動します
  • dojo.require必要なすべてのスクリプトが読み取られるまで実行を延期することにより、の非同期ロードを処理します

DojoCampusで(dojo.addOnLoad)として説明されています:

dojo.addOnLoadは、Dojoを使用するための基本的な側面です。addOnLoad関数を渡すと、Domの準備ができたときに実行する関数が登録されます。これは、すべてのdojo.require()(およびそれらの再帰的な依存関係)がロードされるまでaddOnLoadが待機してから起動するという点で、document.readyおよびbody.onloadとは少し異なります。

于 2009-01-23T16:20:52.540 に答える
-5

これはあなたの問題とは何の関係もないかもしれませんが、同じ症状が発生したケースがありました. 私にとっては、Firefox、Chrome などではすべて正常に機能しましたが、IE8 では機能しませんでした。

dojo がロードされていないように見えました.Dojo が未定義であるという IE8 のエラー (常にではありません) が表示され、スタイル シートと dojo のインポートだけにすべてを削除しても、エラーが発生する可能性があります。

ローカルの Google アプリ エンジン開発サーバーを実行していました。これは、SocketServer.BaseServer を使用する pythons SimpleHTTPServer に基づいているようです。これには、デフォルトで 5 に設定されている BaseServer.request_queue_size があります。この値をオーバーライドするアプリ エンジンが見つからなかったので、開発中の Google アプリ エンジン サーバーの接続数の上限は 5 であると思います。

regedit を使用して、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings に移動します。

“MaxConnectionsPerServer”=dword:00000010 “MaxConnectionsPer1_0Server”=dword:0000010

これは、IE が最大 10 の同時接続を開こうとしたことを示しています。この 2 つのキーを編集して 2 つにし、コンピューターを再起動したところ、問題はなくなりました。

于 2010-03-28T05:10:05.773 に答える