Restangular 如何更新 collection 中的项目

Restangular how to update item in collection

我目前正在摆弄 restangular 和 ui-router。

我确实在我的路由器中解析了 collection 项,这使其可供底层控制器使用。我有一个待办事项列表,我想编辑一个待办事项。所以我加载了一个视图,我可以在其中编辑项目。

我通过 $scope.todo = todos.get(id) 获得模型,我对其进行了更改,然后 $scope.todo.save() 更新了服务器上的模型。但现在我的旧项目仍在待办事项的 collection 中。

我想让我的collection反映单品的变化。我可以从 collection 中删除该项目,然后再重新插入,但这似乎有点太复杂了。在 collection 内更新模型没有简单的方法吗?

更新:添加一些代码

注意:如果状态被调用,todos 属性 得到解决。

如果我编辑单个待办事项,我会通过

解决它
resolve : {
  todo : function($stateParams, todos) {
    return todos.get($stateParams.id);
  }
}

我做了一些更改,然后调用 todo.save()。 collection 这样不会发生任何变化。我试图做一个 todos.patch(todo) 但实际上做了一个奇怪的请求 url 我猜它是为了修补整个 collection (?)

我确定有一种方法可以在 collection 中更改模型,但我不知道如何

在尝试了一些东西之后,我最终替换了 collection 中的项目。我为 lodash 创建了一个小帮手,我想在这里展示它:

  var replaceItemById = function(list, element) {
    var index = _.indexOf(list, _.find(list, { id : element.id }));

    list.splice(index, 1 , element);

    return list;
  };

  _.mixin({'replaceItemById' : replaceItemById});

当我想更新 collection 中的模型时,我会逐步执行:

获取 collection 从 collection 中获取单个项目并对其进行编辑 在项目上调用保存

//The server returns the updated model
todo.save().then(function(editedTodo) {
  _.replaceItemById(todos, editedTodo);
  $state.go('todos.index');
});

这样我就不需要再次获取 collection(即使在大多数情况下你会这样做)并且它在更新单个项目后是最新的。