为什么我会得到“未捕获的ReferenceError:$未定义(匿名函数)”

时间:2012-01-03 23:53:46

标签: javascript razor knockout.js

我有一个提供这些错误的cshtml页面:

Uncaught ReferenceError: $ is not defined               TabNotes:2
(anonymous function)                                    TabNotes:2
TabNotes:12Uncaught ReferenceError: ko is not defined   TabNotes:12
(anonymous function)                                    TabNotes:12
(anonymous function)                                    TabNotes:23

什么会导致这样的错误?我找不到任何理由这样做。我尝试在$(document).ready(function(){中包装javascript函数,但这也不起作用。代码在下面

@model test.Web.Framework.Areas.Administration.Models.TabNotesModel 
@using (UI.DocumentReadyScript())
{    
    if (Model.meta.id.HasValue)
    {
        UI.jQuery("#tbl" + Model.meta.modelname).flexigrid(Model.Grid);
    }
}
<form method="post" action="@Url.Action("TabNotes", new { cmd = "refresh" })" id="@Model.meta.modelname">
<div class="ui-state-highlight ui-corner-all highlight" data-bind="visible: meta.message">
    <span class="ui-icon ui-icon-info"></span><strong data-bind="text: meta.message">
    </strong>
</div>
@using (UI.BeginBlock("Administation.TabNotes", UI.Label("Notes", "Notes").ToString(), test.Web.Framework.Core.enumIcons.pencil, false, false))
{
    <table id="@("tbl" + Model.meta.modelname)">
    </table>
} 
</form>
<script type="text/javascript">
(function() {
        var viewModel=ko.mapping.fromJS(@Html.Raw(UI.JavascriptEncode(Model)));
        viewModel.getData=function() { return ko.mapping.toJSON( this  ); };   
        viewModel.setData=function(data){ 
        $('#tbl'+this.meta.modelname()).flexigrid( data.Grid);
        ko.mapping.updateFromJS(this,data); 
        };
        $('#@Model.meta.modelname').koform({viewmodel: viewModel , validate : {errorElement:'p' }  } );
        $('#@Model.meta.modelname').koform('applyBindings');
        $('#load-partial').click(function() {
            $('#partial').load('@Html.Raw(@Url.Action("CreateNote", "Entity", new {modelEntity = @Model.meta.entity, itemId = @Model.meta.id}))');
        }); 
    })(); 
</script>


<div id="partial"></div>
<button type="button" id="load-partial">Create Note</button>

编辑: jQuery从主页面加载。

3 个答案:

答案 0 :(得分:6)

这意味着没有定义jQuery($)和knockout(ko)。当脚本执行时未加载库时,通常会出现这种情况。

确保在使用框架之前加载框架(即在页面级脚本之前插入与框架相关的脚本标记)。如果这很好,请检查开发人员面板中的网络活动,以确定在下载框架时是否收到错误请求。可能是您正在异步加载框架,这意味着您需要一个异步处理程序来开始执行页面级脚本。

答案 1 :(得分:1)

你的代码中你在哪里引用KO和jQuery?通常会发生此错误,因为您的代码尝试在加载引用之前运行。

我建议使用Fiddler或其他网络活动工具来观察加载(或不加载)引用的时间以及来自的位置。

答案 2 :(得分:0)

尝试将jquery ui小部件合并到我的网站时,我遇到了此错误的问题。我不得不更新包含的css文件的正确路径;它有时候很挑剔。同样也必须为jquery做同样的事情。另请注意您的localhost与'src =“/ code / blah_folder”的位置有关。希望它有所帮助。