时间不早了,所以我可能既愚蠢又盲目,但我已经为此苦苦挣扎了一段时间。任何人都可以看到这里有什么问题吗?
我的 HTML:
<select data-bind="options: Tasks, optionsText: 'TaskName', value: SelectedTask"></select>
<button data-bind="click: newTask">Add New Text</button>
<div data-bind="with: SelectedTask, visible: showEditor()">
<div>
Taskname: <input data-bind="value: TaskName" />
</div>
</div>
视图模型:
Type.registerNamespace("myNameSpace");
myNameSpace.Task = function (data) {
var self = this;
self.TaskId = data.TaskId;
self.TaskName = ko.observable(data.TaskName);
};
myNameSpace.ViewModel = function () {
var self = this;
self.SelectedTask = ko.observable();
self.Tasks = ko.observableArray();
self.showEditor = ko.observable(false);
$.getJSON("/myService/GetAllTasks", function (allData) {
var mappedTasks = $.map(allData, function (item) {
return new myNameSpace.Task(item)
});
self.Tasks(mappedTasks);
});
self.newTask = function () {
var newitem = new myNameSpace.Task({
TaskId: -1,
TaskName: "...your task title..."
});
self.Tasks.push(newitem);
self.editTask(newitem);
};
self.editTask = function (item) {
self.SelectedTask(item); // My program stops executing on this line
self.showEditor(true);
};
}; // End of ViewModel
此代码在“self.SelectedTask(item);”上失败 我不知道为什么。填充 self.Tasks() 的 getJSON 不会返回任何内容,因为 db-table 是空的。(这可能是问题的一部分吗?)
我想要的是在“click:newTask”事件触发后编辑TaskName。新任务被推送到我的任务数组中,我将编辑器设置为可见以键入 SelectedTask 的任务名——这应该是刚刚在“newTask”中创建的那个。
在这里小提琴:http: //jsfiddle.net/dL3JB/2/