1

コンソールがこのように動作する理由を誰か説明できますか?

この質問を一度投稿しましたが、正しく定式化できなかったため、再度閉じました。最初の質問では、問題がコンソールに関連している可能性があるとは言及されていませんでした。変数の奇妙な動作について質問しただけです。基本的に、次のスクリーンショットのみを投稿しました。

ここに画像の説明を入力

ここで、$s.page20行目にログオンして$s.page.naviそこにあり、21行目に再度ログオンすると消えていることに注意してください。

質問の再開

@zerkmsは、コンソール自体に関係がある可能性があると示唆しましたが、答えられる人は誰もいませんでした. 私が質問を閉じた後、彼は次の投稿で私に連絡してきまし

問題

序論は十分にして、問題に戻ります。では、変数はどこに行ったのでしょうか。私が投稿した他の質問から、require.js を使用してファイルをロードしていることがわかります。私はこれに少し慣れていないので、私の問題はそれに関連していました。

Iのコードで$s.pageは、次のことを行います(簡略化):

require(['nav'], $.proxy(function(Nav){

    this.navi = new Nav.Views.Main();

}, this));

navrequire.js がロードする必要があるモジュールです。ファイルがそこにあるまでスクリプトがブロックされ、コンソールを見るとそれが確認されました。

詳細にログインさせてください:

console.log('x');

require(['nav'], $.proxy(function(Nav){

    console.log('y');

    this.navi = new Nav.Views.Main();

}, this));

他のログはそのまま残しました。出力は次のとおりです。

ここに画像の説明を入力

xが最初に記録されていることに注意してください。次にログに記録すると、将来どのようになるかが$s.page 示さ$s.pageれます。本当に奇妙です。

次に、次の行にログオン$s.page.naviすると、そこにはありません。これは正しいことです。

そして最後に、呼ばれることもなくyパーティーに参加。

4

1 に答える 1

0

私が呼んでいるrouter.jsの22行目を参照してください$s.page.navi.start()。これが、この問題の要点でした。解雇できませんでした。私は次のコードでそれを解決しました:

require(['nav'], function(Nav){

    $s.page.navi.start();

});

依存関係を待つだけです。

結論

JavaScript、およびbackbone.jsやrequire.jsなどのライブラリを使用する場合は、実際に何をしているかを追跡し、スクリプトが簡単にブロックされないことを覚えておく必要があります。

アプリケーションの特定のポイントでログを記録するだけでは、必ずしも問題の解決に役立つとは限りません。実際に何が起こっているかを確認するには、アプリケーションのルートからリーフの先端まで実際にログを記録する必要があります。そして、最善のアプローチは常に組み込みデバッガーです。

于 2012-05-08T06:49:47.667 に答える