我正在尝试使用来自我本地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 ...初始任务(title,isDone)中添加了.rows,但是我无法再添加新的任务。如果我按下添加按钮我得到一个错误.value没有定义。删除任务处理没有错误。
任何人都可以帮助我让这个例子有效吗? 对我来说,下一步是将任务列表中的更改更新回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]);
答案 0 :(得分:1)
问题在于这一行:
self.tasks.push(new Task({ title: this.newTaskText() }));
您的Task构造函数希望data参数具有'value'属性,但您只提供了'title'。