为什么ASP.NET MVC无法识别淘汰赛

时间:2014-11-25 18:16:45

标签: javascript asp.net-mvc-4 knockout.js

我正在尝试在我的MVC 4(Web Api)项目中使用knockout.js,所以我使用Managae NuGet包添加了Knockout.js,而不是将其添加到BundleConfig

 bundles.Add(new ScriptBundle("~/bundles/knockout").Include(
                    "~/Scripts/knockout-{version}.js"));

我在_Layout.cshtml

中添加了它
 @Scripts.Render("~/bundles/knockout")

当我尝试在我的ViewModel.js中使用它时 - ko.applyBindings(new ViewModel()); 它没有认识到它 - > "字"找不到 ko ...我忽略了它并继续编写我的代码但是在运行之后没有来自淘汰赛的评论..我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

你没有展示你的代码,但我认为问题很容易解释:

  • 默认情况下,MVC在“脚本”部分中呈现捆绑包,该部分位于页面底部附近
  • 我打赌你在模板体内调用了敲门方法。会发生什么,在那时,脚本仍未包含在页面中,因此错误消息

你必须改变你的代码,这样,当你调用其中一个ko方法时,ko已经被加载了。两种可能的选择(但还有更多):

  • 在布局的<head>部分呈现KO套件
  • 从jQuery文档就绪事件中调用ko函数,如下所示:

    $(document).ready(function(){    //你的ko在这里打电话 });

实际上,第二个解决方案等待执行代码直到所有页面都已加载,并且是运行与页面DOM交互的任何脚本的推荐方法。