我担心这会像拼写错误一样令人尴尬,但由于我坚持这一点并且非常绝望,我愿意自豪地付出代价。 ;)
这是我的情况:
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>
答案 0 :(得分:2)
您的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...
});
答案 1 :(得分:1)
我不是100%确定你的问题是什么或者你得到了什么错误但这就是我要做的 - 将你的Task =功能更改为功能任务 -
function Task(data) {
var self = this;
self.TaskId = data.TaskId;
}
通过说任务=函数而不使用前面的var,你在全局命名空间中注册Task,这不是一个好主意。您的视图模型也是如此...如果您仍然可以修复它...
self.newTaskItem = function () {
var newitem = new Task({
// Your Task is looking for a TaskId, not a TextBatchId
TaskId: 1
});
self.Tasks.push(newitem);
self.editTaskItem(newitem);
};
此外,您正在创建一个TextBatchId,我认为您的Task对象正在寻找TaskId。修复此问题,或者如果您出于某种原因故意这样做,请显示您的查看代码,并更好地解释出现问题以及您看到的错误。
答案 2 :(得分:1)
(假设您的真实代码中没有未披露的东西)
在Task
中,TaskId
不是可观察的,因此当您将SelectedTask
设置为特定任务时,您的编辑器字段将无法正确更新(这是一个相当常见的错误。 observableArray
的元素本身是observable
,但除非您明确地将它们设为这样,否则它们不会。)