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);     
});

与创建全局变量或类级别变量类似,我希望这个 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 回答