淘汰不适用于MVC4项目

时间:2013-02-26 16:34:14

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

我的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 

3 个答案:

答案 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")
}

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