Почему я получаю «Uncaught ReferenceError: $ не определено (анонимная функция)» - PullRequest
2 голосов
/ 04 января 2012

У меня есть страница 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

Что может вызвать такую ​​ошибку?Я не могу найти причину, почему это будет.Я попытался обернуть функцию javascript в $ (document) .ready (function () {, но это тоже не сработало. Код ниже

@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>

edit: jQuery загружается с главной страницы.

Ответы [ 3 ]

6 голосов
/ 04 января 2012

Это означает, что jQuery ($) и нокаут (ko) не определены. Это часто происходит, когда библиотека не загружается ко времени выполнения скрипта.

Убедитесь, что вы загружаете фреймворки перед их использованием (т. Е. Ваши теги скриптов, связанные с фреймворками, вставляются до ваших скриптов на уровне страницы). Если это хорошо, проверьте сетевую активность на панели разработчиков, чтобы увидеть, получаете ли вы ошибочные запросы при загрузке фреймворков. Возможно, вы загружаете фреймворки асинхронно, а это значит, что вам понадобится асинхронный обработчик, чтобы начать выполнение скрипта на уровне страницы.

1 голос
/ 04 января 2012

Где в вашем коде вы ссылаетесь на KO и jQuery? Обычно эта ошибка возникает из-за того, что ваш код пытается работать до загрузки ссылок.

Я рекомендую использовать Fiddler или другой инструмент сетевой активности, чтобы посмотреть, когда ссылки загружены (или нет) и откуда.

0 голосов
/ 09 января 2012

У меня были проблемы с этой ошибкой при попытке включить виджет jquery ui в мой сайт.Мне пришлось обновить правильный путь к включаемому файлу CSS;иногда это может быть придирчиво.Также должен был сделать то же самое для jquery.Также обратите внимание, где находится ваш localhost относительно того, где находится ваш 'src = "/ code / blah_folder".Надеюсь, это поможет.

...