2012-05-06 21 views
1

我想从我的本地Couchdb的数据运行的knockoutjs中获取示例代码。 http://learn.knockoutjs.com/#/?tutorial=loadingsaving在Knockoutjs中使用来自CouchDB的JSON数据

我使用视图从数据库中获取我的任务。由于沙发返回rows.value.tasks

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

我加.value的函数任务(数据)和我加入VAR mappedTasks = $ .MAP(allData.rows ...初始任务(标题,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]); 

回答

1

问题是这一行:

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

你的任务建构预计数据参数有一个“值”属性,但你只提供了一个“冠军”。

+0

谢谢你看我的问题。仍然有定义正确方法的问题。 self.tasks.push(新任务( \t \t {值: “值”, \t \t标题:this.newTaskText()})可加空任务 \t \t); – Pnytje

+0

我不确定你的空白任务是什么意思。你的Task构造函数期望它的参数有一个包含title和isDone属性的value属性。所以你需要像这样:'self.tasks.push(new Task({value:{title:self.newTaskText(),isDone:false}}));' – antishok

+0

超级,谢谢。有用!! – Pnytje