错误:剑道“某事”不是函数

Posted

技术标签:

【中文标题】错误:剑道“某事”不是函数【英文标题】:ERROR: Kendo"Something" is not a function 【发布时间】:2014-01-21 15:35:00 【问题描述】:

所以我试图将我的纯 html/javascript 网站(工作正常)转换为 ASP MVC4 项目。我所做的是获取 XML 并使用 XSLT 进行转换。我确实使用代码from here 来做到这一点

在我的_Layout.cshtml 中,我使用 razor 加载资源

<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>  
<meta http-equiv="content-type" content="text/html; charset=utf-8" />        
 ... things...
  @Scripts.Render("~/bundles/kendoScripts")
  @Scripts.Render("~/bundles/customScript") 
  @Styles.Render("~/Content/themes/Kendo")
  @Styles.Render("~/Content/themes/customCSS")   

我使用布局的视图非常简单,这就是页面中的全部内容

@using Summ.ExtensionCode
@model SumMVC.Models.SummaryModel
@
  ViewBag.Title = "_Summary";
  Layout = "~/Views/Shared/_Layout.cshtml";


<div data-role="content">
@Html.RenderXml(Model.ProgramFilename, Model.StylesheetFilename, Model.Parameters)
</div>

@Scripts.Render("~/bundles/customScript") 中,是一个 JS 文件,renderpage.js,其中包含这段代码 $(this).kendoDropDownList();,其中这是一个选择元素。但我收到一个错误,.kendoDropDownList(); 不是函数。来自萤火虫的错误:TypeError: $(...).kendoDropDownList is not a function 和来自 GoogleChrome 的错误Uncaught TypeError: Object [object Object] has no method 'kendoDropDownList'。似乎在我的包中 JS 文件 kendo.all.min.js 没有开始加载这里是什么样子

bundles.Add(new ScriptBundle("~/bundles/kendoScripts")
            .Include("~/Scripts/kendoui/kendo.web.min.js")
            .Include("~/Scripts/kendoui/kendo.all.min.js")
            );

....
bundles.Add(new ScriptBundle("~/bundles/customScript")
           .....
            .Include("~/Scripts/SummaryScript/renderpage.js")
             ....                       
            );

我假设代码可能在 kendo.all.min.js 完成加载之前执行,但正如您在上面看到的 renderpage.js 是在 kendo 之后。有什么想法或见解吗?

更新

我在head标签中手动加载MVC项目中的资源时忘记添加了

<script type="text/javascript" src="~/Scripts/kendoui/kendo.web.min.js"></script>       
<script type="text/javascript" src="~/Scripts/kendoui/kendo.all.min.js"></script>
....
<script type="text/javascript" src="~/Scripts/ExecSummaryScript/renderpage.js"></script>

效果很好。

更新2

原来 Kendo JS 文件根本没有被加载。我在开发控制台中检查了资源,并注意到它甚至不存在。仔细检查后,我注意到除了一些 .min.js 文件之外的所有资源都已加载。 jquery-ui-1.10.3.min.js 和 jquery.browser.min.js 有一些加载但没有加载。

【问题讨论】:

这意味着不包含 jquery 插件“kendoDropDownList”,或者包含在与$当前表示的不同版本的 jquery 中 @KevinB 我也是这么想的。所以我所做的就是用 1.9 替换 jquery 1.8 没有运气,并且还尝试从 github.com/jquery/jquery-migrate 那里没有任何东西的 jqueryMigrate。我应该注意,我包含了 HTML/Javascript 项目中的所有内容,并且一切正常,只是不在 MVC 项目中 jquery的版本无关紧要,重要的是jquery相对于kendoui在页面中的位置 @KevinB 是的,Kendoui 似乎带有 jquery 的软件包。正如这篇帖子的答案***.com/questions/14382884/… 所说,我也确实在我得到的 kendoui 文件夹中看到了一个 jquery.min.js。 @KevinB 经过仔细检查,我注意到所有资源都已加载,除了一些 .min.js 文件。 jquery-ui-1.10.3.min.js 和 jquery.browser.min.js 有一些加载但没有加载。 【参考方案1】:

我知道这会很愚蠢。原来这是一个 MVC4 gothcha。我不得不重命名我的文件。显然它不喜欢扩展名为min.jsI found the answer here的文件

【讨论】:

以上是关于错误:剑道“某事”不是函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在单击剑道网格每一行时调用单个函数

如何使用 jquery 函数编辑剑道网格中的特定绑定列

如何获取剑道上传成功或完成函数返回的值

没有为此对象定义无参数构造函数。在剑道网格中

我怎样才能只为第一个函数调用做某事?

如何使用剃刀语法在剑道网格列模板中调用 javascript 函数