2014-01-06 119 views
1

现在,我可以创建对象并通过json api将它们保存到rails数据库。这是一个简单的待办事项列表应用程序,当我添加一个对象时,它会进入输入字段上方的待办事项列表。我也能够查询索引视图上的所有对象,并列出我所有的待办事项对象。无法更新角度对象

当我点击每个todo项目旁边的复选框时,它应该将其:done属性更改为true,以便在单击“清除”按钮(这是clearCompleted函数)后我不再显示它。

这里是我的js代码

angular.module("Todo", ["ngResource"]) 

function TodoController($scope, $filter, $resource) { 
    Todo = $resource("/todos.json", {id: "@id"}, {update: {method: 'PUT'}}) 
    $scope.todos = Todo.query() 

    $scope.getTotalTodos = function() { 
     return $scope.todos.length; 
    }; 

    $scope.clearCompleted = function() { 
    Todo.save({done:true}) 
    $scope.todos = $filter("filter")($scope.todos, {done:false}); 
}; 

    $scope.addTodo = function() { 
    entry = Todo.save({title:$scope.newTodo.title, importance:$scope.newTodo.importance, description:$scope.newTodo.description, done:false}) 
    $scope.todos.push(entry); 
    $scope.newTodo.title = ''; 
    $scope.newTodo.importance = ''; 
    $scope.newTodo.description = ''; 
    }; 

} 

正在发生的事情是,而不是更新该对象在数据库中,它正在创造一个全新的待办事项,只是给它的:done => true属性。这很有意义,因为在clearCompleted函数中,它看起来像我们正在创建一个不更新现有对象的对象。

如何更新数据库中的记录呢?

+0

你在哪里把ID在参数? – apneadiving

+0

你指的是资源方法吗?有它,因为我正在跟踪一个railscast。 – user2184718

回答

0

您不应该使用Todo.save({})来更新待办事项。正如你所说,它创建一个新的对象。

编写代码如下。

Todo = $resource("/todos.json", {id: "@id"}, {'save': {method: 'PUT'}}) 
$scope.todos = Todo.query(); 
    var todo = todos[0];//A todo that should be updated 
    todo.done = true; 
    todo.$save(); 

Mabe你需要一个todo key参数在你的保存url中。

using $resource

+0

我们是否真的获得了第一个待办事项,或者我们是否应该获得更新的待办事项?当我们点击复选框时,我们正在尝试更改属性。 – user2184718

+0

很明显,应该是应该更新的待办事项。 – Alborz

+0

它看起来像保存创建另一个对象。我将如何改变这个来更新属性。 – user2184718