質問: $(namespace.ElementIds.LIST); //some code that pulls a list from the server and dumps the data into our element }); }; ``` 私の慣習では、この.jsファイルはController Home/List(およびこれに対応してView Home/List.cshtml)に属しています。 さらに、namespace.ElementIdsは、(ほぼ)同一の.csファイルと同期して手動で保持されるIdのリストを持っているため、サーバーが生成したhtmlは、jsファイルで参照するものと同じIDを持つ要素を作成します。 私は、elementIdとjsの名前空間をリファクタリングに適したものにするための解決策として、これに不満です。より良い方法がありますか? 現在のところ、私のjavascriptはsrc属性でスクリプトタグを使って読み込まれていますが、C#クラスだけを使ってnamespace + elementIdsを定義できるようにするためのスクリプトタグは何も持っていない.cshtmlファイルであると考えています。私はこれが良い考えではないと感じていますが、なぜ私は実際にその理由を知りません。リファクタリング機能を強化し、サーバコードをクライアントコードにリンクすることができますが、その欠点は何ですか?キャッシングの欠如?パフォーマンスの低下?
回答: 一般的に、あなたはあなたの文書にリンクされている多くのJavaScriptファイルを持っていたくはありません。それぞれは、HTTPプロトコルで往復の時間とオーバーヘッドを消費します。 プロジェクト内のすべてのJSファイルを収集し、それらを1つの縮小jsファイル(または場所に軽い負荷が必要な場合は2〜3)にまとめるシステムを構築/使用する必要があります。これにより、それらが素早く一度に読み込まれるようになります。 次に、ドキュメント内の1つのファイルをリンクし、元のjsファイルの名前を変更する必要はありません。またはそれがどこに住んでいるか。 名前空間については、次の点に注意する必要があります。 おそらくグローバルな名前空間を汚染しないように、ほとんどのモジュールをスコープ内にまとめておくべきでしょう。これは、名前空間のメカニズムのためのショートカットを追加するという利点があります。 ``` ;(function($, $namespace) { var $module = $namespace.list = {}; $module.Update = function () { var element = $($namespace.ElementIds.LIST); //some code that pulls a list from the server and dumps the data into our element }; })(jQuery, namespace.home); ``` これにより、便利な(一般的な)名前を持つプライベートヘルパー関数を持つことができます。それらはその範囲内からのみアクセス可能であり、他のモジュールと競合しないからです。さらに、これはあなたのjQueryがグローバル名前空間で$識別子を取るかもしれない別のjsライブラリと決して衝突しないようにします。