web-dev-qa-db-fra.com

kendo.syncReady n'est pas une fonction

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.

7
George Great

Résolu le problème en ajoutant les références dans la vue _Layout.cshtml.

1
George Great

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:

  1. Vous utilisez les wrappers ASP.NET MVC pour générer vos widgets Kendo.
  2. Vous incluez vos balises de script Kendo after où les enveloppeurs MVC génèrent le code JS de Kendo (comme avant <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.

Correction n ° 1

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!

Correction n ° 2

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>

Discussion complémentaire

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.

10
John Washam

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.

4
John Sully

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>
0
Chris J