#javascript #asp.net-mvc
#javascript #asp.net-mvc
Вопрос:
Я хотел узнать ваше мнение об управлении скриптами в ASP.ЧИСТЫЙ MVC. Есть 2 проблемы, которые мне особенно интересны:
- Сценарий отслеживания включает зависимости представлений
- Управление и минимизация сценариев просмотра
Как и во многих проектах, мои представления состоят из нескольких частичных представлений и шаблонов редактора. Мне нравится сохранять сценарии, относящиеся к этим представлениям, в одном и том же объекте кода, например
Частичное представление SigningKeysForm должно иметь свои собственные скрипты jQuery / jQueryUI.
Это означает, что любое представление, которое отображает это частичное представление, должно включать файлы сценариев jQuery / jQueryUI.
Также другая проблема заключается в том, что когда представление состоит из нескольких таких частичных представлений, это означает, что javascipt в частичных представлениях будет находиться в нескольких местах в сгенерированном html.
Мой текущий подход к этим проблемам заключается в использовании нисходящего синтаксического анализа представлений в ASP .Чистый MVC.
Для решения первой проблемы я определяю расширение HtmlHelper для включения скрипта, например
<% Html.RequireScript(Scripts.JQuery); %>
Таким образом, в каждом частичном представлении и представлении я явно указываю, какие скрипты требуются. Реализация этого метода заключается в создании HashSet для текущего HttpContext и добавлении туда требуемого скрипта.
На моей главной странице у меня есть другое расширение HtmlHelper, которое проверяет HttpContext и отображает теги, включающие скрипт, например:
<%=Html.RenderScriptIncludeTags()%>
Таким образом, я могу отслеживать требования к представлениям и отображать только требуемые скрипты.
Для сценариев просмотра я использую аналогичный подход. Я использую пользовательский пользовательский элемент управления Asp .Net, который вместо рендеринга своего содержимого сохраняет содержимое скрипта в буфер на HttpContext, например:
<mvc:script runat="server">
$(function(){
alert("Hello " "<%=Model.Name%>");
});
</mvc:script>
Опять же, в главном представлении у меня есть расширение HtmlHelper, которое минимизирует (при необходимости) сохраненные скрипты и отображает их, например:
<%=Html.RenderScripts()%>
</body>
Я думаю, что это работает как решение, но для этого требуется, чтобы скрипты и скрипты были внизу главной страницы. Это означает, что включенные скрипты не находятся в разделе head.
Я хочу знать, есть ли лучшие способы управления требованиями к сценариям и сценариями просмотра страниц с помощью ASP.ЧИСТЫЙ MVC.
Ответ №1:
Вы думали об использовании существующего инструмента, который выполняет подобные действия, например, Cassette (ранее назывался Knapsack)?
Cassette автоматически сортирует, объединяет, минимизирует, кэширует и версирует все ваши шаблоны JavaScript, CoffeeScript, CSS, LESS и HTML.
Я лично не использовал его (пока), но он выглядит довольно хорошо, и кажется, что он должен делать именно то, что вам нужно (и даже больше). Стоит отметить, что для коммерческого использования существует небольшая стоимость.
РЕДАКТИРОВАТЬ: теперь выпущен под лицензией MIT 🙂
Комментарии:
1. Как бы вы загружали свои скрипты параллельно с Cassette?
2. Примечание: это не MIT, не GPL commercial 🙂
3. @Ryan Идея заключается в том, что Cassette объединяет его в один запрос, поэтому не нужно загружать несколько скриптов 🙂
Ответ №2:
У Telerik есть утилита регистрации сценариев, которая делает именно то, что вы делаете.
http://www.telerik.com/help/aspnet-mvc/web-assets-working-with-javascript-web-assets.html
В качестве бонуса он также выполняет сжатие.
Да, он отображает скрипты внизу.
Лично я обычно включаю несколько важных скриптов сверху обычным способом, а остальные — с помощью scriptregistrar. Таким образом, я могу иметь некоторые скрипты, доступные во время загрузки страницы.
Регистратор сценариев telerik является частью их пакета MVC. http://www.telerik.com/products/aspnet-mvc.aspx
Комментарии:
1. Регистраторы Telerik не будут сокращаться. Они будут только объединять и gzip-сжимать ваши материалы.