MVC - есть ли хороший способ связать элементы управления с их соответствующим JavaScript? - PullRequest
7 голосов
/ 07 марта 2012

Я довольно новичок в MVC и не могу выбрать лучший способ хранения файлов cshtml и их соответствующего кода javascript.Некоторый код JS в моем проекте должен выполняться глобально, но большая его часть полностью связана с конкретными представлениями или частичными представлениями.

Если я помещаю javascript в представления, я получаю беспорядок встроенного не кэшируемого javascript, если я помещаю его в один центральный файл, я теряю модульность.

Я слышал, что в MVC4 естьБудут ли функции минификации, могу ли я что-то сделать с MVC3, что позволит мне выбирать в представлениях, какие javascript-скрипты включать, а затем группировать их и автоматически минимизировать?(может даже в группах?)

Ответы [ 5 ]

6 голосов
/ 07 марта 2012

Кассета По сути, это то же самое, что и в будущих пакетах MVC4.

На странице просмотра вы можете ссылаться на скрипты и таблицы стилей, используя вспомогательный класс Кассеты Bundles.

@{
    Bundles.Reference("Scripts/jquery.js");
    Bundles.Reference("Scripts/page.js");
    Bundles.Reference("Styles/page.css");
}
<!DOCTYPE html>
    <html>
...

Кроме того, кассета имеет встроенную поддержку Меньше и CoffeScript .Он также поддерживает HTML-шаблоны, если вы заинтересованы в клиентских MVC-инфраструктурах, таких как Knockout.js или Backbone.js .

Тем не менее, вы должны выбрать, каксгруппировать ваш контент.Как указывает официальная документация , вероятно, лучшим выбором будет рассматривать пакеты как единицы развертывания .

Имейте в виду, что пакет - это единицаразвертывания .Если какой-либо ресурс в пакете изменяется, тогда весь пакет должен быть снова загружен веб-браузерами. Так что, возможно, сгруппируйте общий код в пакет и поместите скрипты страниц в свои собственные пакеты .
1 голос
/ 07 марта 2012

Вы можете поместить javascript в отдельные файлы для каждого представления. Затем в _Layout.cshtml введите @RenderSection для заголовка:

<head>
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script>
    @RenderSection("head",false)
</head>

Затем в каждом представлении вы можете поместить секцию, которая будет отображаться в заголовок:

@section head{
    <script src="@Url.Content("~/ViewScripts/Order/New.js")" type="text/javascript"></script>
}
0 голосов
/ 07 марта 2012

Не рекомендуется использовать скрипт в партиалах (на мой взгляд)

предлагает вам написать отдельный частичный скрипт для разделения js и связать события при загрузке страницы или, если частичный был загружен через ajax, то при событии успеха.

тогда вы можете быть уверены, что события не связаны несколько раз, а просмотр - это просто просмотр

0 голосов
/ 07 марта 2012

@ Подход Андерса хорош, если вам нужно, чтобы скрипты были в теге head.Но я считаю, что в большинстве случаев это не требуется, если это JavaScript для конкретной страницы.Вы можете поместить свои теги сценария, которые ссылаются на ваши файлы сценария, где они требуются в представлении. Автоматически связывание и минимизация будут поддерживаться в ASP.NET 4.5 .До этого времени вы можете интегрировать yuicompressor в Visual Studio.

0 голосов
/ 07 марта 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...