1

我正在尝试从使用本地 Couchdb 的数据运行的 knockoutjs 获取示例代码。 http://learn.knockoutjs.com/#/?tutorial=loadingsaving

我使用视图从数据库中获取我的任务。当 Couch 返回 rows.value.tasks

{"total_rows":5,"offset":0,"rows":[
{"id":"216c1717d57aa328b8d3e5a79f0008fe","key":["216c1717d57aa328b8d3e5a79f0008fe",1],"value":{"title":"derde title taak","isDone":false}},

我在函数 Task(data) 中添加了 .value 并在 var mappedTasks = $.map(allData.rows...我按下“添加”按钮,我在 .value is not defined 上出现错误。删除任务已处理且没有错误。

谁能帮我让这个例子工作?对我来说,下一步是将任务列表中的更改更新回 db。对此的帮助也非常受欢迎。

// TaskListViewmodel

function Task(data) {
    this.title = ko.observable(data.value.title);
    this.isDone = ko.observable(data.value.isDone);
}

function TaskListViewModel() {
// Data
var self = this;
self.tasks = ko.observableArray([]);
self.newTaskText = ko.observable();
self.incompleteTasks = ko.computed(function() {
    return ko.utils.arrayFilter(self.tasks(), function(task) { return !task.isDone() });
});

// Operations
self.addTask = function() {
    self.tasks.push(new Task({ title: this.newTaskText() }));
    self.newTaskText("");
};
self.removeTask = function(task) { self.tasks.remove(task) };

// Load initial state from server, convert it to Task instances, then populate self.tasks
 $.getJSON("http://127.0.0.1:5984/tasks/.../tasks", function(allData) {
    var mappedTasks = $.map(allData.rows, function(item) { return new Task(item) });
    self.tasks(mappedTasks);
}); 

}

ko.applyBindings(new TaskListViewModel, $("#DataKO")[0]);
4

1 回答 1

1

问题在于这一行:

self.tasks.push(new Task({ title: this.newTaskText() }));

您的 Task 构造函数期望数据参数具有“值”属性,但您只提供了“标题”。

于 2012-05-06T23:46:53.790 回答