15

ASP.Net MVC 4アプリケーションに取り組んでおり、バンドルとミニフィクションを使用してスタイルとスクリプトファイルをレンダリングしています。

別のファイル(ファイルB)で関数を呼び出すスクリプトファイル(ファイルA )があります。メソッドを使用すると、ファイルBの前にファイルAのタグがレンダリングされるため、エラーが発生し、スクリプトが正しく機能しません。
@Scripts.Render()link

ファイルごとに個別のバンドルを使用せずに、タグを特定の順序で強制的@Script.Render()にレンダリングする方法はありますか????link

編集

IncludeDirectoryそのフォルダにすべてのスクリプトファイルを含める方法を使用しています

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/js").IncludeDirectory(
                    "~/Scripts/js",
                    "*.js"));
    }
}
4

4 に答える 4

9

デフォルトでバンドルすると、スクリプトがアルファベット順に追加されます。既知のライブラリを移動し、正しい順序で追加します (たとえば、最初に jQuery を配置し、次に jQuery-ui を配置します)。

最も簡単な方法は、スクリプトを自分で注文することです。1 つの方法は、カスタム スクリプトを別のフォルダーに移動してから、すべてのスクリプトを独自のバンドルに必要な順序で追加することです。

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/js").IncludeDirectory(
                    "~/Scripts/js","*.js"));

        bundles.Add(new ScriptBundle("~/bundles/myScripts").Include(
            "~/Scripts/custom/scriptB.js",
            "~/Scripts/custom/scriptA.js"));
    }
}

もう 1 つのオプションはワイルドカードです。このオプションには、カスタム スクリプトを独自のフォルダーに移動することも含まれますが、バンドルは 1 つしかありません ( source ):*

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {       
        bundles.Add(new ScriptBundle("~/bundles/js").Include(
            "~/Scripts/*.js",
            "~/Scripts/custom/scriptB.js",
            "~/Scripts/custom/scriptA.js"));
    }
}

また、「ファイルごとに個別のバンドルを使用せずに、特定の順序でタグを強制的@Script.Render()にレンダリングする方法はありますか」というコメントについても、個別のリンクタグはデバッグモードでのみ発生することに注意してください。linkリリース モードでデプロイすると、リンク タグとファイルは 1 つだけになります。

于 2013-01-28T14:07:54.933 に答える
6

この質問のDarinDimitrovの回答として、独自の注文者を作成してください。明示的なScriptBundleインクルード注文を指定するにはどうすればよいですか。

public class MyBundleOrderer : IBundleOrderer
{
    public virtual IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
    {
        //any ordering logic here

        return files;
    }
}
于 2013-01-28T14:15:45.510 に答える
1

バンドルされたファイルの順序については、BundleCollection.FileSetOrderList をご覧ください。私はそれについてこのブログ投稿を見つけました: http://weblogs.asp.net/imranbaloch/archive/2012/09/30/hidden-options-of-asp-net-bundling-and-minification.aspx .

JQuery 順序付けのコード例:

BundleFileSetOrdering bundleFileSetOrdering1 = new BundleFileSetOrdering("jquery");
bundleFileSetOrdering1.Files.Add("jquery.js");
bundleFileSetOrdering1.Files.Add("jquery-min.js");
bundleFileSetOrdering1.Files.Add("jquery-*");
bundleFileSetOrdering1.Files.Add("jquery-ui*");
bundleFileSetOrdering1.Files.Add("jquery.ui*");
bundleFileSetOrdering1.Files.Add("jquery.unobtrusive*");
bundleFileSetOrdering1.Files.Add("jquery.validate*");
bundles.FileSetOrderList.Add(bundleFileSetOrdering1);
于 2013-06-17T10:22:07.180 に答える