0

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")

bundlerconfigで正しく構成されているもの:

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 
4

3 に答える 3

4

ChromeまたはFirebugからのJSコンソールエラーを投稿できますか?ノックアウトからの参照が欠落しているように見えます。

編集:スクリプトをビューの最後に配置してください!もう1つ、ノックアウトの参照はjqueryの参照より下にある必要があります。これは、その依存関係があるためです。

編集:ノックアウトを登録する

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

あなたのビューでそれをレンダリングします

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/knockout")
于 2013-02-26T16:47:02.667 に答える
0

JavaScriptコードをJSファイルに含め、ノックアウト後にレンダリングします

このような:

 @Scripts.Render("~/bundles/knockout")
 @Scripts.Render("~/bundles/MYSCRIPTS")
于 2013-02-26T16:57:57.383 に答える
0

Index.cshtmlファイルの最後にあるスクリプト行を削除して問題を修正しました。

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

そしてそれを次のように置き換えます:

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

セクションスクリプトは、インクルードとは異なる時間にロードされると思います。

于 2014-11-26T19:09:23.937 に答える