Подтвердить что ты не робот

Правильное место для загрузки jQuery в представлении макета MVC

Я создал MVC 4 с использованием шаблона по умолчанию, где @Script.Render(~"bundles/jquery") вызывается после @RenderBody(). Согласно сообщению this, это рекомендуемый порядок выполнения, чтобы предотвратить загрузку скриптов для блокировки рендеринга страницы.

Я хочу добавить небольшой вызов jQuery в моем представлении или мой раздел RenderBody(). Похоже на это, в верхней части моего представления:

<script type="text/javascript">
$(document).ready(function()
{
    $("#eta_table").tablesorter({
        headers: {
            0: { sorter: false }
        }
    });
});

Однако это всегда будет вызывать ошибку Error: '$' is undefined, потому что jQuery не загружается до тех пор, пока не будет RenderBody().

Я не могу себе представить, что это новая проблема, это похоже на довольно распространенную задачу... Любые предложения о том, как это следует обрабатывать?

Для справки, здесь загружается jQuery:

        @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>

Edit

В итоге я переместил script в файл scripts.js и загрузил его ниже jQuery на странице макета, например:

            bundles.Add(new ScriptBundle("~/bundles/custom").Include(
                    "~/Scripts/Custom/tablesorter.js",
                    "~/Scripts/Custom/scripts.js"));

И HTML:

        @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/custom")
    @RenderSection("scripts", required: false)
</body>

За исключением этого все еще кажется неправильным, так как теперь скрипты должны загружаться для каждой страницы, использующей представление макета макета. Он работает, но, это лучший способ?

4b9b3361

Ответ 1

Создайте новый раздел MyScripts под всеми другими библиотечными скриптами

_layout

@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
@RenderSection("MyScripts", required: false)

MyView

@section MyScripts {
    <script type="text/javascript">
        $("#eta_table");
        ...
    </script>
}

Теперь ваши пользовательские скрипты страниц загружаются только после загрузки jQuery.