Utworzono MVC 4 przy użyciu domyślnego szablonu, gdzie @Script.Render(~"bundles/jquery")
jest wywoływana po @RenderBody()
. Zgodnie z postem this jest to zalecana kolejność wykonywania, aby zapobiec ładowaniu skryptów w celu zablokowania renderowania strony.Prawidłowe miejsce do załadowania jQuery w widoku układu MVC
Chcę dodać małe wywołanie jQuery w moim widoku lub mojej sekcji RenderBody()
. Wygląda to tak, na szczycie moim zdaniem:
<script type="text/javascript">
$(document).ready(function()
{
$("#eta_table").tablesorter({
headers: {
0: { sorter: false }
}
});
});
to jednak zawsze będzie rzucać Błąd Error: '$' is undefined
ponieważ jQuery nie jest załadowany aż po RenderBody()
.
Nie mogę sobie wyobrazić, że to nowy problem, wydaje się dość powszechnym zadaniem ... Jakieś sugestie, jak należy to załatwić?
Dla porównania, tutaj jest gdzie jQuery jest załadowany:
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
</body>
Edycja
skończyło się przesuwając skrypt powyżej w moim pliku scripts.js i załadowano go poniżej jQuery na stronie układu, tak:
bundles.Add(new ScriptBundle("~/bundles/custom").Include(
"~/Scripts/Custom/tablesorter.js",
"~/Scripts/Custom/scripts.js"));
I HTML:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/custom")
@RenderSection("scripts", required: false)
</body>
Poza tym wciąż wydaje się nie tak, jak teraz skrypty będą musieli ładować dla każdej strony, która korzysta z widoku układu głównego. Działa, ale czy to najlepszy sposób?
Lub po prostu użyj istniejącej sekcji "skrypty". –
Tak, zrobiła to sekcja "skrypty". Nie wiedziałem dokładnie, co to robi, dziękuję za lekcję. To zadziałało. – Tom
@ChrisPratt tak, to z pewnością prawda. Ale lubię używać wstępnie zdefiniowanej sekcji "skrypty" dla bibliotek, które zawierają skrypt z pojedynczą linią, więc stworzyłem nową sekcję specjalnie dla skryptu, który wypisałbym tylko na tej stronie. W rzeczywistości, zrobiłbym przepustkę do refaktora, by wyodrębnić "MyScripts" do oddzielnego pliku js, aby skorzystać z pakowania. – Jasen