我担心这会像错字一样令人尴尬,但是由于我坚持这样做并且非常绝望,所以我愿意为此感到自豪。 ;)
这是我的情况:
Task = function (data) {
var self = this;
self.TaskId = data.TaskId;
self.TaskName = ko.observable(data.TaskName);
}
ViewModel = function () {
var self = this;
self.Tasks = ko.observableArray();
self.SelectedTask = ko.observable();
}
$.getJSON("/myService/GetAllTasks",
function (tData) {
var mappedTasks = $.map(tData, function (item) {
return new Task(item)
});
self.Tasks(mappedTasks); // Populate Tasks-array...
});
self.newTaskItem = function () {
var newitem = new Task({
TaskId: -1,
TaskName: "enter taskname here"
});
self.Tasks.push(newitem); // THIS ONE CRASH
self.Tasks().push(newitem); // BUT SUBSTITUTED WITH THIS ONE IT RUNS ON...
self.editTaskItem(newitem);
};
self.editTaskItem = function (item) {
self.SelectedTask(item); // UNTIL TIL LINE WHERE IT CRASHES FOR GOOD...
self.showEditor(true); // makes Task-edior visible in HTML
};
我的文件中还包含一个“ self.SelectedTask.subscription”,但将其保留在代码中没有任何区别。
我还应该提到我的数据库表是空的,因此getJSON不将任何数据返回给被映射的Task,而留下self.Tasks()= [](根据Firebug)
我已经修复了代码中错误关闭的标签。
第2部分:
一段时间后决定从起点重做我的代码。它使我更进一步。
现在,代码在以下两行中停止(在“ self.newTaskItem”中):
self.Tasks.push(newitem);
self.SelectedTask(newitem); // Here it fails.
这两个可观察对象在我的HTML中是这样连接的:
<select data-bind="options: Tasks, optionsText: '$root.TaskName', value: SelectedTask"</select>
最佳答案
看来您的ViewModel()
函数永远不会关闭。在要结束该函数声明的任何地方添加一个结束}
。在我看来(根据您的格式),您需要这样做:
ViewModel = function () {
var self = this;
self.Tasks = ko.observableArray();
self.SelectedTask = ko.observable();
}
此外,您需要使用
$.getJson
关闭);
呼叫:$.getJSON("/myService/GetAllTasks",
function (tData) {
var mappedTasks = $.map(tData, function (item) {
return new Task(item)
});
self.Tasks(mappedTasks); // Populate Tasks-array...
});