kendo.syncReady 不是函数
kendo.syncReady is not a function
我真的是 Kendo UI 的新手,一路上遇到了一些问题。我用BundleConfiguration
解决引用问题后,报错:
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 免费试用版中获得了所有这些。
通过在 _Layout.cshtml
视图中添加引用解决了问题。
kendo.syncReady
功能是在 KendoUI 的最新版本中添加的(大约 v2017.1 223)。 Telerik 开发人员在 forum post:
中写道
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 小部件。
- 您在 之后包含 Kendo 脚本标记,其中 MVC 包装器输出 Kendo 的 JS 代码(就像
<body>
关闭之前一样) .
ASP.NET MVC 包装器为您生成 Kendo JS 代码,它们现在将该代码包装在 kendo.syncReady
函数中,但是如果您包含 Kendo 的Kendo JS被MVC包装器插入页面后的脚本标签,kendo.syncReady
函数还不存在,你会看到错误。
修复 #1
解决此问题的第一种方法是将 Kendo <script>
标记移动到 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>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/kendo.aspnetmvc.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>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/kendo.aspnetmvc.min.js"></script>
@Html.Kendo().DeferredScripts(true)
</body>
进一步讨论
如果您继续看到 kendo.syncReady is not a function
错误,请查看您生成的 HTML 的来源并确保 Kendo 脚本标签在 [之前][] 之前真正被输出=51=] MVC 包装器生成的代码。还要确保您使用的是正确版本的 Kendo,并且 Kendo 的版本在您的 JS 文件和 DLL 文件之间是相同的。
阅读 Telerik 网站上的博客条目后,似乎修复是在引用 kendo.all.js 之后添加对 kendo.aspnetmvc.js 的引用。我在我的网站上使用版本 2017.2.504 尝试了此操作并解决了问题。
我在 _layout.cshtml 中添加了以下脚本:
<script type="text/javascript" asp-append-version="true" src="~/lib/kendo-ui/js/kendo.aspnetmvc.min.js"></script>
我真的是 Kendo UI 的新手,一路上遇到了一些问题。我用BundleConfiguration
解决引用问题后,报错:
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 免费试用版中获得了所有这些。
通过在 _Layout.cshtml
视图中添加引用解决了问题。
kendo.syncReady
功能是在 KendoUI 的最新版本中添加的(大约 v2017.1 223)。 Telerik 开发人员在 forum post:
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 小部件。
- 您在 之后包含 Kendo 脚本标记,其中 MVC 包装器输出 Kendo 的 JS 代码(就像
<body>
关闭之前一样) .
ASP.NET MVC 包装器为您生成 Kendo JS 代码,它们现在将该代码包装在 kendo.syncReady
函数中,但是如果您包含 Kendo 的Kendo JS被MVC包装器插入页面后的脚本标签,kendo.syncReady
函数还不存在,你会看到错误。
修复 #1
解决此问题的第一种方法是将 Kendo <script>
标记移动到 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>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/kendo.aspnetmvc.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>
<script src="https://kendo.cdn.telerik.com/2017.1.223/js/kendo.aspnetmvc.min.js"></script>
@Html.Kendo().DeferredScripts(true)
</body>
进一步讨论
如果您继续看到 kendo.syncReady is not a function
错误,请查看您生成的 HTML 的来源并确保 Kendo 脚本标签在 [之前][] 之前真正被输出=51=] MVC 包装器生成的代码。还要确保您使用的是正确版本的 Kendo,并且 Kendo 的版本在您的 JS 文件和 DLL 文件之间是相同的。
阅读 Telerik 网站上的博客条目后,似乎修复是在引用 kendo.all.js 之后添加对 kendo.aspnetmvc.js 的引用。我在我的网站上使用版本 2017.2.504 尝试了此操作并解决了问题。
我在 _layout.cshtml 中添加了以下脚本:
<script type="text/javascript" asp-append-version="true" src="~/lib/kendo-ui/js/kendo.aspnetmvc.min.js"></script>