0

私はより複雑な JavaScript アプリケーションをいくつか書き始めており、私自身の知識の限界に直面しています。名前付けの誤りや明らかな初心者のことを許してください。私は js のプロではありません!

維持しやすいように、4 つまたは 5 つのスクリプトを独自のファイルに入れています。したがって、ページ要素 (複雑なフォームなど) の作成を処理するスクリプト、データを処理するだけのスクリプト、一般的な ajax 要求オブジェクトの作成、返されたデータのパーサーとエラー関数の定義、および純粋に表示指向のスクリプトが存在する可能性があります。

ページにグローバル変数を設定しました。これらの変数は、実行時に読み込まれるさまざまなスクリプトによって設定されます。たとえばvar myapp = { };、メインの HTML ページで定義し、スクリプトでさまざまな関数を次のようにこの「名前空間」に入力します。

myapp.myfunction = function(){
    // do stuff
}

問題は、すべての関数定義をラップするブロックを含むすべてのスクリプトにもかかわらず、$(document).ready(function()別のスクリプトを参照するあるスクリプトから関数が呼び出されると (つまり、私のファイルがファイル内の関数をdata.js呼び出すと、時々myapp.myDisplayFunctiondisplay.jsObject has no method 'myDisplayFunction'

すべての関数を 1 つの巨大なスクリプトにまとめること以外に、この問題にどのように対処しますか? 私が見逃しているベストプラクティスはありますか? それとも、スクリプトが呼び出される別の順序を指定するだけの問題ですか?

ありがとう

4

2 に答える 2

0

呼び出そうとしているメソッドが存在するかどうか (すでにロードされているかどうか) がわからない場合は、チェックを行うことができます。

if (myapp) //my app namespace is defined
{
    if (myapp.myFunction) //myFunction is defined
    {
        myapp.myFunction();
    }
    else
        alert('You have to load myFile.js first!');    
}
于 2013-01-09T18:55:08.223 に答える
0

使用する前に関数を確認してください:

if(typeof(myapp.myDisplayFunction) !== undefined) {
    // do your stuff
} else {
    // wait for a while
}

asyncファイルのロード中に属性が設定されているかどうかを確認し.jsます。

于 2013-01-09T18:59:35.253 に答える