我的Index.cshtml文件中有以下内容(来自淘汰网站):
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
<script type="text/javascript">
// Here's my data model
var ViewModel = function (first, last) {
this.firstName = ko.observable(first);
this.lastName = ko.observable(last);
this.fullName = ko.computed(function () {
// Knockout tracks dependencies automatically. It knows that fullName depends on firstName and lastName, because these get called when evaluating fullName.
return this.firstName() + " " + this.lastName();
}, this);
};
ko.applyBindings(new ViewModel("Planet", "Earth")); // This makes Knockout get to work
</script>
我的布局有这一行:
@Scripts.Render("~/bundles/knockout")
在bundler配置中正确配置:
bundles.Add(new ScriptBundle("~/bundles/knockout").Include(
"~/Scripts/Libraries/knockout-2.2.1.js"));
Chrome看到了文件而VS正在给我智能感知,所以我不确定是怎么回事。没有任何淘汰赛功能正在发挥作用。
我在MVC之外测试了这个(只使用html / css)并且它工作正常。知道发生了什么事吗?
编辑:我尝试使用没有捆绑器的直接引用,它仍然不起作用:
<script type="text/javascript" src="~/Scripts/Libraries/knockout-2.2.1.js"></script>
我从chrome收到错误:
Uncaught ReferenceError: ko is not defined
答案 0 :(得分:4)
你能从chrome或firebug发布一些JS控制台错误吗?看起来像是淘汰赛的缺失参考。
编辑:将脚本放在视图的末尾!另一件事,淘汰的引用必须保持低于jquery的引用,因为它依赖。
编辑: 注册淘汰赛
bundles.Add(new ScriptBundle("~/bundles/knockout").Include(
"~/Scripts/knockout-{version}.js"));
在您的视图中渲染
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/knockout")
答案 1 :(得分:0)
将您的javascript代码包含在JS文件中,并在淘汰后呈现此内容
像这样:
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/MYSCRIPTS")
答案 2 :(得分:0)
我通过删除Index.cshtml文件末尾的脚本行修复了我的问题:
<script src="~/Scripts/ConfigGroup.js"></script>
并将其替换为:
@section Scripts {
@Scripts.Render("~/Scripts/ConfigGroup.js")
}
我想部分脚本会在不同于包含的时间加载。