in Views/Shared
open _Layout.cshtml
и в теге head создайте тег script и создайте массив (назовите его postJquery
:
<head>
...
<script>var postJquery = [];</script>
...
</head>
Теперь в том же файле (_Layout.cshtml
) перейдите в конец и добавьте этот код перед окончанием тега body:
<script>for(var i=0;i<postJquery.length;i++) postJquery[i]();</script> //just ad this line
</body>
Теперь везде, где вам нужно запустить код, который зависит от jquery, просто добавьте его в функцию и добавьте его в массив postJquery
, и он будет запускаться после загрузки jQuery следующим образом:
postJquery.push(function(){
//your code goes here
});
например, ваш случай будет:
@foreach (var book in Model.Category.Books)
{
<div class="rate-star-@book.Id"></div>
<script>
postJquery.push(function(){
$(".rate-star-@book.Id").stars({ stars:5, readonly:false});
});
</script>
}
}
Приведенный выше код будет работать нормально, но мне не нравится, что тег скрипта и его содержимое будут повторяться для каждого элемента книги, например, если в цикле 20 книг, следующий код будет повторяться 20 раз (конечно, для каждой будет изменяться идентификатор книги):
<script>
postJquery.push(function(){
$(".rate-star-@book.Id").stars({ stars:5, readonly:false});
});
</script>
Так что вместо этого я бы сделал что-то вроде этого:
@foreach (var book in Model.Category.Books)
{
<div class="rate-star" data-id="@book.Id"></div>
}
<script>
postJquery.push(function(){
$(".rate-star").stars({ stars:5, readonly:false});
});
</script>
Поскольку я не знаю о .stars
, следует ли использовать его для одного элемента (и нажатие на приведенный выше код влияет на все элементы), вы можете сделать это следующим образом:
@foreach (var book in Model.Category.Books)
{
<div class="rate-star" data-id="@book.Id"></div>
}
<script>
postJquery.push(function(){
$(".rate-star").each(function(){
$(this).stars({ stars:5, readonly:false});
});
});
</script>