Knockout.js knockoutjs 3.2.0无法找到我的";点击";viewmodel中的绑定函数

Knockout.js knockoutjs 3.2.0无法找到我的";点击";viewmodel中的绑定函数,knockout.js,Knockout.js,我最喜欢的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.observabl

我最喜欢的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);
                }
            });
        }
    };
}
此viewmodel的实例应用于
ko.applyBindings()

这依赖于另一个名为:TaskList viewModel的任务的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">&nbsp;</i>Done</button>
            </div>
        </div>
    </li>
</ul>

  • 多恩
但是有些地方工作不正常,因为Knockout无法在
TaskList
viewmodel中找到
removeTask
函数,该函数在Knockout的
foreach
绑定中运行

错误消息是:


ReferenceError:removeTask未定义

除了您的
addNewTask
方法之外,是否有其他代码将项目添加到
任务
数组?@nemesv有一部分代码将从服务器接收的数据分配给
任务
数组。这发生在
$(文档).ready()
中的
$(文档).ready()
中的该代码中,您是否也使用了正确的
任务列表
构造函数?@nemesv感谢mate。现在可以了。非常感谢。