kendo.syncReady is not a function
这是我的观点:
<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>
这种情况发生在Chrome上.在IE上,它告诉我datepicker是未定义的.
也许我错过了一个参考或什么?或者有人能告诉我如何检查我的jQuery脚本的版本?我从Telerik Free Trial获得了所有这些.
解决方法
The
syncReady
method is added in the kendo.aspnetmvc.js file,because the reason for including it was a major problem with jQuery 3.1 and how the templates are generated in MVC. With that in mind,ensuring that the kendo.aspnetmvc.js file is updated with the latest version should resolve the error with the missing function.
导致此错误的主要条件有两个:
>您使用ASP.NET MVC包装器生成您的Kendo小部件.
>在MVC包装器输出Kendo的JS代码之后包含你的Kendo脚本标签(比如之前< body> close).
ASP.NET MVC包装器为您生成Kendo JS代码,它们现在将该代码包装在kendo.syncReady函数中,但是如果在MVC包装器将kendo JS插入页面之后包含Kendo的脚本标记,则为kendo. syncReady函数尚不存在,您将看到错误.
修复#1
解决此问题的第一种方法是移动您的Kendo<脚本>上面的标签,MVC包装器输出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>
这不是理想的两个主要原因:这些脚本将呈现阻塞,而kendo.all.min.js文件超过1MB!
修复#2
您还可以推迟MVC包装器的脚本输出,如下所示:
@(Html.Kendo().DatePicker().Name("datepicker").Deferred(true))
这可以防止输出使用MVC包装器的JS代码并基本上存储渲染的JS,因此您可以将它放在页面上的任何位置:
<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>
进一步讨论
如果您继续看到kendo.syncReady不是函数错误,请查看生成的HTML的源代码,并确保在MVC包装器生成的代码之前真正输出Kendo脚本标记.还要确保使用正确版本的Kendo,并且您的JS文件和DLL文件之间的Kendo版本是相同的.