我的应用程序在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包含所有可观察项的所有当前值。
答案 0 :(得分: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.
&#13;