kendo.syncReady不是一个函数

问题描述 投票:8回答:4

我对Kendo UI真的很陌生,而且我遇到了一些问题。在我使用BundleConfiguration解决了引用问题之后,显示了一个错误:

kendo.syncReady不是一个函数

这是我的观点:

<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获得了所有这些。

jquery kendo-ui kendo-asp.net-mvc
4个回答
13
投票

kendo.syncReady函数是在最近版本的KendoUI中添加的(约为v2017.1 223)。 Telerik开发人员在forum post中写道:

syncReady方法被添加到kendo.aspnetmvc.js文件中,因为包含它的原因是jQuery 3.1的主要问题以及如何在MVC中生成模板。考虑到这一点,确保使用最新版本更新kendo.aspnetmvc.js文件应该使用缺少的函数解决错误。

导致此错误的主要条件有两个:

  1. 您使用ASP.NET MVC包装器生成您的Kendo小部件。
  2. 在MVC包装器输出Kendo的JS代码之后包含你的Kendo脚本标签(就像之前的<body>关闭一样)。

ASP.NET MVC包装器为您生成Kendo JS代码,现在它们将该代码包装在kendo.syncReady函数中,但是如果在MVC包装器将Kendo JS插入页面后包含Kendo的脚本标记,那么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>
</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 is not a function错误,请查看生成的HTML的来源,并确保在MVC包装器生成的代码之前真正输出Kendo脚本标记。还要确保使用正确版本的Kendo,并且您的JS文件和DLL文件之间的Kendo版本是相同的。


7
投票

在阅读Telerik网站上的博客条目后,似乎修复是在引用kendo.all.js之后添加对kendo.aspnetmvc.js的引用。我在我的网站上使用版本2017.2.504尝试了这个并修复了问题。


1
投票

通过在_Layout.cshtml视图中添加引用来解决问题。


0
投票

我将以下脚本添加到_layout.cshtml中:

<script type="text/javascript" asp-append-version="true" src="~/lib/kendo-ui/js/kendo.aspnetmvc.min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.