当在视图中使用ko时,ko.applyBindings给出错误“ko未定义”

时间:2013-09-17 01:15:47

标签: asp.net-mvc asp.net-mvc-3 knockout.js

我的MVC布局(底部)中有以下内容:

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/viewmodels")

我在Developer工具的Sources选项卡中看到了knockout加载。

在我的一个观点中,我必须做以下事情:

<script type="text/javascript">ko.applyBindings(@Html.Raw(Json.Encode(Model)));</script>

但这给了我一个错误:ko is not defined

为什么会发生这种情况,尽管装满了淘汰赛?

4 个答案:

答案 0 :(得分:9)

问题是我的视图是在淘汰赛之前加载的。把它推到我的Layout.cshtml顶部:

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/knockout")

修正了问题。

答案 1 :(得分:2)

你也应该在页面底部放置 @ ko.Apply(Model),而不是在页面顶部拉上脚本。

以下代码将解决您的问题

@section scripts{
    @ko.Apply(Model)
}

请记住在布局视图中声明脚本部分,否则会导致异常

@RenderSection("scripts", required: false)

答案 2 :(得分:0)

我通过删除Index.cshtml文件末尾的脚本行修复了我的问题:

<script src="~/Scripts/ConfigGroup.js"></script>

并将其替换为:

@section Scripts {
    @Scripts.Render("~/Scripts/ConfigGroup.js")
}

我想部分脚本会在不同于包含的时间加载。

现在我提到了ko。在ConfigGroup.js脚本中不再有错误

答案 3 :(得分:0)

在我的情景中@RobVious answer是部分但尚未完成。我按照这些步骤来解决问题。

  1. 将以下部分添加到共享布局的标题<head>中(ex _Layout.cshtml

    @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @Scripts.Render("~/bundles/knockout")

  2. 然后将淘汰代码添加到文档就绪标签中,如下所示。

    $(document).ready(function () { function AppViewModel() { this.firstName = "Bert"; this.lastName = "Bertington"; } ko.applyBindings(new AppViewModel()); });

  3. 如果这不行,请检查您是否 knockout.js 正在加载或不使用检查元素 enter image description here