【问题标题】:Why ASP.NET MVC doesn't recognize knockout为什么 ASP.NET MVC 不识别淘汰赛
【发布时间】:2015-01-23 21:04:23
【问题描述】:

我正在尝试在我的 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...我忽略了它并继续编写我的代码,但在运行它后没有来自淘汰赛的评论..我是什么这里不见了?

【问题讨论】:

  • 我做到了,它没有解决它:(
  • 你是在 $(document).ready() 中调用 ko.applyBindings() 吗?
  • hmmm nope.. 我是这样写的:$(function(){ ko.applyBindings(new ViewModel()); });
  • 错了吗?你能给我一个正确方法的代码示例吗..在网上查看示例后,似乎是正确的……

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


【解决方案1】:

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

  • 默认情况下,MVC 在靠近页面底部的脚本部分呈现包
  • 我敢打赌,您在模板正文中调用了敲除方法。发生的情况是,此时脚本仍未包含在页面中,因此出现错误消息

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

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

    $(document).ready(function() { // 你的 ko 在这里调用 });

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

【讨论】:

  • 我做到了,我还添加了我的代码,试图将淘汰赛添加到我的项目中,我还尝试了你的解决方案,我正在根据 SignalR Microsoft 教程(本教程中使用淘汰赛)工作(直到现在)教程我只在 js 文件夹中使用 kp.. 所以我没有要放置的 head 标签来渲染 ko bundle..
猜你喜欢
  • 2016-11-03
  • 2016-05-20
  • 2013-02-07
  • 2015-03-01
  • 2014-08-05
  • 2012-07-17
  • 2015-03-12
  • 2014-04-13
  • 1970-01-01
相关资源
最近更新 更多