kendo.syncReady不是一个函数

时间:2017-05-30 06:40:56

标签: jquery kendo-ui kendo-asp.net-mvc

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

4 个答案:

答案 0 :(得分:11)

最新版本的KendoUI中添加了kendo.syncReady功能(大约v2017.1 223)。 Telerik开发人员在forum post中写道:

  

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

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

  1. 使用ASP.NET MVC包装器生成Kendo小部件。
  2. 您在之后包含您的Kendo脚本标记,其中MVC包装器输出Kendo的JS代码(就像之前<body>关闭一样)。
  3. 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版本是相同的。

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我在_layout.cshtml中添加了以下脚本:

<script type="text/javascript" asp-append-version="true" src="~/lib/kendo-ui/js/kendo.aspnetmvc.min.js"></script>