我的Top-Most ViewModel:
function Profile() {
var self = this;
this.id = ko.observable(0);
this.name = ko.observable("");
this.tasks = ko.observableArray([]);
this.newTaskName = ko.observable('');
this.newTaskDescription = ko.observable('');
this.addNewTask = function() {
if (self.newTaskName().trim() != '' && self.newTaskDescription().trim() != '') {
var newTask = new TaskList();
var newTaskId = 0;
$.ajax({
url: AddTaskUrl + "?userId=" + self.id() + "&taskName=" + self.newTaskName() + "&taskDesc=" + self.newTaskDescription(),
type: "PUT",
success: function(data) {
newTaskId = data;
newTask.taskId(newTaskId);
newTask.taskName(self.newTaskName());
newTask.taskDescription(self.newTaskDescription());
self.tasks.push(newTask);
}
});
}
};
}
此视图模型的实例已应用于ko.applyBindings()
这依赖于另一个viewModel来执行任务:TaskList viewModel。
function TaskList() {
var self = this;
self.taskId = ko.observable(0);
self.taskName = ko.observable('');
self.taskDescription = ko.observable('');
self.removeTask = function() {
myProfile.tasks.remove(self);
$.ajax({
url: RemoveTaskUrl + "?taskId=" + self.taskId(),
type: "DELETE",
success: function(data) {
console.log(data);
}
});
};
}
TaskList viewmodel使用foreach
绑定绑定到UI,如下所示:
<ul data-bind="foreach: tasks">
<li class="list-group-item">
<div class="row">
<div class="col-md-4">
<span data-bind="text: taskName"></span>
<br /> <ins data-bind="text: taskDescription"></ins>
</div>
<div class="col-md-2">
<button class="btn btn-danger" data-bind="click: removeTask"><i class="glyphicon glyphicon-check"> </i>Done</button>
</div>
</div>
</li>
</ul>
但有些东西不能正常工作,因为Knockout在removeTask
viewmodel中找不到TaskList
函数在淘汰 foreach
中运行结合。
错误消息是:
ReferenceError: removeTask is not defined