0

アプリケーションの viewModel に多くの項目があり、それらの値をアラート ボックスに表示して、そこに実際に何が格納されているかを確認したいと考えています。このビュー モデルをコントローラーに戻そうとすると、値が表示されず、代わりに「viewModel」が定義されていないというエラーが表示されます。

これが私のビューモデルスクリプトの例です

$(document).ready(function () {
    function ViewModel() {

        var self = this;

        self.SectionId = ko.observable("");
        self.SectionName = ko.observable("");

        var SectionNames = {
            Id: self.SectionId,
            Name: self.SectionName
        };

        self.selectedSectionName = ko.observable();
        self.SectionNames = ko.observableArray();

        // Initialize the view-model for Work Sections
        $.ajax({
            url: '@Url.Action("GetSections", "Home")',
            cache: false,
            type: 'GET',
            contentType: 'application/json; charset=utf-8',
            data: {},
            success: function (data) {
                self.SectionNames(data);
            }
        });

    var viewModel = new ViewModel();
    ko.applyBindings(viewModel);     
});

グローバル変数またはクラス レベル変数を作成する場合と同様に、このビューモデルにすべての監視可能なアイテムの現在の値をすべて含めたいと考えています。

4

1 に答える 1

0

(@CSharper で言及されているように) 終了タグが欠落している場合を除いて、コードはあなたが話しているエラーをスローしません。あなたの質問への答えは、その終了タグがないか、表示されていない別のコードにあります。

$.ajaxコード (+ 終了タグ) とスタブを組み合わせて確認する方法は次のとおりです。

$.ajax = function() {}; // Noop stub.

$(document).ready(function () {
    function ViewModel() {

        var self = this;

        self.SectionId = ko.observable("");
        self.SectionName = ko.observable("");

        var SectionNames = {
            Id: self.SectionId,
            Name: self.SectionName
        };

        self.selectedSectionName = ko.observable();
        self.SectionNames = ko.observableArray();

        // Initialize the view-model for Work Sections
        $.ajax({
            url: '@Url.Action("GetSections", "Home")',
            cache: false,
            type: 'GET',
            contentType: 'application/json; charset=utf-8',
            data: {},
            success: function (data) {
                self.SectionNames(data);
            }
        });
    }
      
    var viewModel = new ViewModel();
    ko.applyBindings(viewModel);     
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
$root = <code data-bind="text: ko.toJSON($root)"></code><br />
No errors on console.

于 2015-05-07T06:49:25.037 に答える