Je suis vraiment nouveau sur Kendo UI et j'ai rencontré quelques problèmes en cours de route. Après avoir utilisé BundleConfiguration
, qui a résolu le problème des références, une erreur s'est affichée:
kendo.syncReady n'est pas une fonction
Voici mon avis:
<head>
@Styles.Render("~/Content/kendo.common.min.css")
@Styles.Render("~/Content/kendo.default.min.css")
@Scripts.Render("~/Scripts/jquery.min.js")
@Scripts.Render("~/Scripts/kendo.web.min.js")
@Scripts.Render("~/Scripts/kendo.aspnetmvc.min.js")
@Scripts.Render("~/Scripts/kendo.all.min.js")
@Scripts.Render("~/Scripts/modernizr-2.6.2.js")
</head>
<body>
@(Html.Kendo().DatePicker().Name("datepicker"))
</body>
Cela se produit sur Chrome. Sur Internet, cela me dit que datepicker n’est pas défini. Peut-être me manque-t-il une référence? Ou quelqu'un peut-il me dire comment vérifier les versions de mes scripts jQuery? Je les ai tous obtenus de l'essai gratuit Telerik.
Résolu le problème en ajoutant les références dans la vue _Layout.cshtml
.
La fonction kendo.syncReady
a été ajoutée dans une version récente de KendoUI (environ v2017.1 223). Un développeur Telerik a écrit ceci dans un forum post :
La méthode
syncReady
est ajoutée dans le fichier kendo.aspnetmvc.js, car son motif était un problème majeur avec jQuery 3.1 et la manière dont les modèles sont générés dans MVC. Dans cet esprit, le fait de s'assurer que le fichier kendo.aspnetmvc.js est mis à jour avec la version la plus récente résoudra l'erreur avec la fonction manquante.
Cette erreur est due à deux conditions principales:
<body>
close).Les wrappers ASP.NET MVC génèrent le code Kendo JS pour vous et le recouvrent maintenant de la fonction kendo.syncReady
, mais si vous incluez les balises de script de Kendo après que Kendo JS est inséré sur la page par les wrappers MVC, la fonction kendo.syncReady
ne existe encore, et vous verrez l'erreur.
La première façon de résoudre ce problème consiste à déplacer vos balises Kendo <script>
ci-dessus, là où les enveloppes MVC génèrent le code Kendo JS.
<head>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/kendo.all.min.js"></script>
</head>
<body>
@(Html.Kendo().DatePicker().Name("datepicker"))
</body>
Cela n’est pas idéal pour deux raisons principales: ces scripts bloquent le rendu et le fichier kendo.all.min.js
dépasse 1 Mo!
Vous pouvez également différer la sortie du script à partir des wrappers MVC comme ceci:
@(Html.Kendo().DatePicker().Name("datepicker").Deferred(true))
Cela empêche la sortie du code JS dans lequel vous utilisez l'encapsuleur MVC et stocke essentiellement le JS rendu, afin que vous puissiez le placer où vous voulez sur la page:
<body>
@(Html.Kendo().DatePicker().Name("datepicker").Deferred(true))
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/kendo.all.min.js"></script>
@Html.Kendo().DeferredScripts(true)
</body>
Si vous continuez à voir l'erreur kendo.syncReady is not a function
, affichez la source de votre code HTML généré et assurez-vous que les balises de script Kendo sont réellement en sortie before le code généré par les wrappers MVC. Assurez-vous également que vous utilisez la bonne version de Kendo et que les versions de Kendo sont identiques entre vos fichiers JS et votre fichier DLL.
Après avoir lu une entrée de blog sur le site Telerik, il semblait que le correctif consistait à ajouter une référence à kendo.aspnetmvc.js après la référence à kendo.all.js. J'ai essayé ceci sur mon site en utilisant la version 2017.2.504 et le problème a été résolu.
J'ai ajouté le script suivant à mon _layout.cshtml:
<script type="text/javascript" asp-append-version="true" src="~/lib/kendo-ui/js/kendo.aspnetmvc.min.js"></script>