Solución:
los kendo.syncReady
La función se agregó en una versión reciente de KendoUI (alrededor de v2017.1 223). Un desarrollador de Telerik escribió esto en una publicación del foro:
los
syncReady
El método se agrega en el archivo kendo.aspnetmvc.js, porque la razón para incluirlo fue un problema importante con jQuery 3.1 y cómo se generan las plantillas en MVC. Con eso en mente, asegurarse de que el archivo kendo.aspnetmvc.js esté actualizado con la última versión debería resolver el error con la función que falta.
Hay dos condiciones principales que causan este error:
- Utiliza los contenedores ASP.NET MVC para generar sus widgets de Kendo.
- Incluye sus etiquetas de secuencia de comandos de Kendo después donde los envoltorios MVC generan el código JS de Kendo (como antes
<body>
cerrar).
Los contenedores ASP.NET MVC generan código Kendo JS para usted, y ahora envuelven ese código dentro del kendo.syncReady
función, pero si incluye las etiquetas de secuencia de comandos de Kendo después de que los envoltorios MVC inserten Kendo JS en la página, kendo.syncReady
La función aún no existirá y verá el error.
Arreglo n. ° 1
La primera forma de solucionar esto es mover tu Kendo <script>
etiquetas arriba donde los envoltorios MVC generan el código 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>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/kendo.aspnetmvc.min.js"></script>
</head>
<body>
@(Html.Kendo().DatePicker().Name("datepicker"))
</body>
Esto no es ideal por dos razones principales: esos scripts bloquearán el procesamiento y el kendo.all.min.js
¡El archivo tiene más de 1 MB!
Arreglo n. ° 2
También puede diferir la salida del script de los contenedores MVC de esta manera:
@(Html.Kendo().DatePicker().Name("datepicker").Deferred(true))
Esto evita la salida del código JS donde usa el contenedor MVC y básicamente almacena el JS renderizado, por lo que puede colocarlo donde quiera en la página:
<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>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/kendo.aspnetmvc.min.js"></script>
@Html.Kendo().DeferredScripts(true)
</body>
Más discusión
Si continúa viendo el kendo.syncReady is not a function
error, vea la fuente de su HTML generado y asegúrese de que las etiquetas de secuencia de comandos de Kendo realmente se estén generando antes de el código generado por los contenedores MVC. También asegúrese de estar usando la versión correcta de Kendo y que las versiones de Kendo sean las mismas entre sus archivos JS y su archivo DLL.
Después de leer una entrada de blog en el sitio de Telerik, parecía que la solución era agregar una referencia a kendo.aspnetmvc.js después de la referencia a kendo.all.js. Probé esto en mi sitio usando la versión 2017.2.504 y solucionó el problema.
Agregué el siguiente script a mi _layout.cshtml:
<script type="text/javascript" asp-append-version="true" src="https://foroayuda.es/~/lib/kendo-ui/js/kendo.aspnetmvc.min.js"></script>