Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. По умолчанию порядок связывания является алфавитным для имен с подстановочными знаками (как указано в комментариях). Тем не менее, он также заказывает, основываясь на том, что он думает о вашем дереве зависимостей, а скрипты jQuery
, похоже, попадают в верхнюю часть. Вам нужно создать объект, который реализует IBundleOrder
:
class NonOrderingBundleOrderer : IBundleOrderer
{
public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
return files;
}
}
Это предотвращает порядок по умолчанию. Теперь его использовать:
var bundle = new ScriptBundle("~/bundles/globalization")
.Include("~/Scripts/globalize/globalize.js")
.Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
.Include("~/Scripts/jquery.validate.globalize.js");
bundle.Orderer = new NonOrderingBundleOrderer();
bundles.Add(bundle);
ref: http://stevescodingblog.co.uk/changing-the-ordering-for-single-bundles-in-asp-net-4/
Для дальнейшего чтения ответ на вопрос MikeSmithDev дает дополнительную информацию о стандартном заказе для популярных библиотек скриптов:
Заказ файлов в комплекте - Что являются известными библиотеками?
Чтобы уменьшить коды во время создания пакетов, я предлагаю вам создать метод расширения.
Требовать классы инфраструктуры:
class NonOrderingBundleOrderer : IBundleOrderer
{
public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
{
return files;
}
}
static class BundleExtentions
{
public static Bundle NonOrdering(this Bundle bundle)
{
bundle.Orderer=new NonOrderingBundleOrderer();
return bundle;
}
}
Теперь просто используйте его следующим образом:
Все в одной команде
В последней версии MVC 5 (27 октября 2014 года) yo должен использовать этот класс вместо:
class AsIsBundleOrderer : IBundleOrderer
{
public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
{
return files;
}
}
И создать связку, как и другой ответ:
var bundle = new ScriptBundle("~/bundles/globalization")
.Include("~/Scripts/globalize/globalize.js")
.Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
.Include("~/Scripts/jquery.validate.globalize.js");
bundle.Orderer = new AsIsBundleOrderer();
bundles.Add(bundle);
jquery.validate.globalize.js
требуется для двух других. Из ссылки ref: «[Связчик] даже автоматически помещает известные файлы javascript в фреймворк сначала в комплекте, например, сценарии jQuery или Prototype, чтобы убедиться, что они запускаются до того, как ваш собственный код, который использует их типы, будет запущен & quot; – Mister Epic 11 October 2013 в 19:37