我担心这会像打错字一样令人尴尬,但由于我坚持这一点并且非常绝望,我愿意自豪地付出代价。;)
这是我的情况:
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 没有向 mappedTasks 返回任何数据,留下 self.Tasks() = [ ] (根据 Firebug)
我已经修复了代码中错误关闭的标签。
第2部分:
一段时间后决定从起点重做我的代码。它让我更进一步。
代码现在停在这些行的第二行(在“self.newTaskItem”中):
self.Tasks.push(newitem);
self.SelectedTask(newitem); // Here it fails.
这两个 observable 在我的 HTML 中是这样连接的:
<select data-bind="options: Tasks, optionsText: '$root.TaskName', value: SelectedTask"</select>