我担心这会像打字错误一样令人尴尬,但由于我坚持这一点并且非常绝望,我愿意自豪地付出代价。 ;)
这是我的情况:
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.
这两个可观察对象在我的 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...
});
关于javascript - 与 knockout.js 我的错误作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19188367/