【问题标题】:MVC 5, globalize, validate german date: How to bundle the js-scripts?MVC 5,全球化,验证德国日期:如何捆绑 js 脚本?
【发布时间】:2017-12-08 18:55:25
【问题描述】:

在回答这个问题 (MVC 5 - can not get globalisation running) 时,我用一堆“

我没有管理的内容:我想捆绑脚本。如果我这样尝试(摘自 bundleConfig.cs):

 bundles.Add(new ScriptBundle("~/bundles/jqueryvalDe").Include(
                    "~/Scripts/jquery.validate.js",
                    "~/Scripts/jquery.validate.unobtrusive.js",
                    "~/Scripts/cldr.js",
                        "~/Scripts/cldr/event.js",
                        "~/Scripts/cldr/supplemental.js",
                        "~/Scripts/cldr/unresolved.js",
                        "~/Scripts/globalize.js",
                        "~/Scripts/globalize/currency.js",
                        "~/Scripts/globalize/number.js",
                        "~/Scripts/globalize/date.js",
                        "~/Scripts/globalize/plural.js",
                        "~/Scripts/globalize/relative-time.js",
                        "~/Scripts/globalize/unit.js",
                        "~/Scripts/jquery.validate.globalize.js"
                    ));         

但我从 JavaScript 中得到一个错误:“全球化”未定义

看来,脚本的顺序变了……

目前我使用一种解决方法:我编写了一个自定义 HTM-Helper。

 public static class GermanDateValidationExtension
{
    public static MvcHtmlString ScriptsForGermanDateValidation(this HtmlHelper helper)
    {
        return new MvcHtmlString("<script src=\"~/ Scripts / jquery.validate.js\"></script>\n" +
                                 "<script src = \"~/Scripts/jquery.validate.unobtrusive.js\"></script>\n" +
                                 "<script src = \"~/Scripts/cldr.js\"></script>\n" +
                                 "<script src = \"~/Scripts/cldr/event.js\"></ script>\n" +
                                 "<script src = \"~/Scripts/cldr/supplemental.js\"></script>\n" +
                                 "<script src = \"~/Scripts/cldr/unresolved.js\"></script>\n" +
                                 "<script src = \"~/Scripts/globalize.js\"></script>\n" +
                                 "<script src = \"~/Scripts/globalize/currency.js\" ></script>\n" +
                                 "<script src = \"~/Scripts/globalize/number.js\"></script>\n" +
                                 "<script src = \"~/Scripts/globalize/date.js\"></script>\n" +
                                 "<script src = \"~/Scripts/globalize/plural.js\" ></script>\n" +
                                 "<script src = \"~/Scripts/globalize/relative-time.js\"></script>\n" +
                                 "<script src = \"~/Scripts/globalize/unit.js\"></script>\n" +
                                 "<script src = \"~/Scripts/jquery.validate.globalize.js\"></script>\n" +
                                 "<script>\n" +
                                 "$.when(\n" +
                                 "$.get(\"/Scripts/cldr/main/de/ca-gregorian.json\"),\n" +
                                 "$.get(\"/Scripts/cldr/main/de/numbers.json\"),\n" +
                                 "$.get(\"/Scripts/cldr/supplemental/likelySubtags.json\"),\n" +
                                 "$.get(\"/Scripts/cldr/supplemental/timeData.json\"),\n" +
                                 "$.get(\"/Scripts/cldr/supplemental/weekData.json\")\n" +
                                 ").then(function() {\n" +
                                 "return [].slice.apply(arguments, [0]).map(function(result) {\n" +
                                 "return result[0];\n" +
                                 "});\n" +
                                 "}).then(Globalize.load)\n" +
                                 ".then(function() {\n" +
                                 "Globalize.locale(\"de-DE\");\n" +
                                 "});\n" +
                                 "</ script > ");
    }

}

并在视图中使用它:

...
@section Scripts {      
@Html.ScriptsForGermanDateValidation()
}  
...

我的问题是:如何正确捆绑脚本?

【问题讨论】:

  • 尝试使用实现IBundleOrderer的类(例如class BundleReorder : IBundleOrderer { ... },在其上放置IEnumerable&lt;FileInfo&gt;IEnumerable&lt;BundleFile&gt;方法,然后在BundleConfig中设置:bundle.Orderer = new BundleReorder();。检查一些信息:@ 987654322@.

标签: asp.net-mvc asp.net-mvc-5 bundling-and-minification jquery-globalize


【解决方案1】:

问题似乎源于在globalize.js 之前呈现jquery.validate.globalize.js 的捆绑订单,该订单使用为知名库而建立的“依赖关系树”,并且它们的自定义扩展将在其他人之前呈现。因此,为了根据需要设置加载顺序,请创建一个实现 IBundleOrder 接口及其相应扩展方法的类:

// from Sebastián Rojas (/a/26602075)
class UnorderedBundleOrderer : IBundleOrderer
{
    public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
    {
        return files;
    }
}

static class BundleExtensions
{
    public static Bundle UnorderedBundling(this Bundle bundle)
    {
        bundle.Orderer = new UnorderedBundleOrderer();
        return bundle;
    }
}

然后您可以在 BundleConfig.cs 文件中使用上面的自定义捆绑顺序:

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/jqueryvalDe")
           .UnorderedBundling()
           .Include(
            "~/Scripts/jquery.validate.js",
            "~/Scripts/jquery.validate.unobtrusive.js",
            ...
            ...
            "~/Scripts/globalize.js",
            ...
            ...
            "~/Scripts/jquery.validate.globalize.js"
    ));
}

相关问题:

ASP.NET MVC - Bundle Config order

Ordering of Files within a bundle - What are the known libraries?

【讨论】:

    【解决方案2】:

    解决方案是 - Tetsuya Yamamoto 所说的:编写自己的 orderer。

    public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
        {
            return files;
        }
    

    并使用它:

     var qvDeBundle  =new ScriptBundle("~/bundles/jqueryvalDe").Include(
                        "~/Scripts/jquery.validate.js",
                        "~/Scripts/jquery.validate.unobtrusive.js",
                        "~/Scripts/cldr.js",
                            "~/Scripts/cldr/event.js",
                            "~/Scripts/cldr/supplemental.js",
                            "~/Scripts/cldr/unresolved.js",
                            "~/Scripts/globalize.js",
                            "~/Scripts/globalize/currency.js",
                            "~/Scripts/globalize/number.js",
                            "~/Scripts/globalize/date.js",
                            "~/Scripts/globalize/plural.js",
                            "~/Scripts/globalize/relative-time.js",
                            "~/Scripts/globalize/unit.js",
                            "~/Scripts/jquery.validate.globalize.js"
                        );         
            qvDeBundle.Orderer=new UnorderBundleOrderer();
            bundles.Add(qvDeBundle);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多