1

これはすべてのサーバー/クライアント側 Web アプリケーションに当てはまりますが、rails または asp.net について知りたいです。

すべての JavaScript を含む 1 つの大きな application.js ファイルを用意することをお勧めします。したがって、複数のページまたはアクションがある場合、JavaScript のスコープを設定するにはどうすればよいですか。

たとえば、ログイン ページと顧客入力フォームがあります。

ログインページでは、ユーザー名にフォーカスを設定したいと思います。また、ファーストネームのテキストボックスdocument.readyに設定したい顧客入力フォームでfocus、いくつかの重い Ajax とクライアント側の検証を行います。スクリプトが衝突せず、スコープが適切であることを確認するにはどうすればよいですか?

スクリプトの両方の部分が 1 つのファイルに存在するため、スクリプトの適切な部分に適切なタイミングでアクセスするにはどうすればよいでしょうか?

ベストプラクティスの推奨事項はありますか? 個々のコントローラー アクション用に別のファイルをロードしたくありません...

どんな助けも素晴らしいでしょう...

4

2 に答える 2

0

javascriptでロケーションチェックを行うことを検討しましたか?

何かのようなもの...

if(location.href.match(/login\.aspx/)){
    //code here
} else if(location.href.match(/otherpage\.aspx/)){
    //other code here
}
于 2013-02-28T18:46:47.920 に答える
0

コードの特定の部分のみを実行する

私は同様の問題に直面しましたが、railsではなくasp.netに直面しました。

このjavascriptソリューションはどこでも機能するはずです:

http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/

これは基本的にDOMベースのルーティングの母です。現在地を指定するbodyタグに属性を指定します。それを読んでください、それはかなりシンプルで機能的です。

DOMベースのルーティングは最近非常に人気があり、多くのフレームワークに実装されています(railsにはこれに対する独自のソリューションがあると確信しています)が、この単純なバージョンはどこにでも簡単に実装できます。

また、その投稿にはいくつかのフォローアップリンクがあります。それらも読んで、自分に最適なものを決定する必要があります。

スクリプトをバンドルする

JavaScriptで「あなたが書いたりデバッグしたりするのはあなたが公開するものである」というのは誤解です。

クライアント側で解釈されるスクリプト言語であるため、処理せずにネット経由で直接送信できますが、ファイルが不必要に大きくなり、ファイルごとに1つずつリクエストが多くなります。したがって、そこからすべてのコメント/スペースを削除して、すべてのコードを1つのファイルにまとめることができますが、その結果、コードが保守できなくなります。これは必要なトレードオフだと思うかもしれませんが、そうではありません。

それらをバンドルするjavascriptファイルを「構築」し、それらのコンテンツをはるかに小さいサイズに縮小することができます。そのためのツールはたくさんあります。レールには独自のソリューションがあると確信しています(お気に入りの検索プロバイダーでJavaScriptをバンドルして検索してください)。テスト環境でバンドルされていない/縮小されていないコードを使用できるため、開発とデバッグが非常に簡単です。実稼働環境に公開する必要がある場合は、スクリプトをバンドルします。

次に、次のようなさまざまなファイルでオブジェクト/関数を定義できます。

file1:

var FOO = {

};

file2:

FOO.common = {
  init     : function(){ ... },
  finalize : function(){ ... }  
};

file3:

FOO.shopping = {
  init     : function(){ ... },
  cart     : function(){ ... },
  category : function(){ ... }
};

このようにすると、基本的に1つのファイルの場合と同じ結果が得られますが、アプリの設計時に読む方が少しわかりやすくなります。

編集:このソリューションはjQueryの$(document).ready()関数を使用しています。これが望ましくない場合は、他の準備ができているイベントに接続することもできます。

于 2013-02-28T18:57:15.813 に答える