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(即使在大多数情况下你会这样做)并且它在更新单个项目后是最新的。
我目前正在摆弄 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(即使在大多数情况下你会这样做)并且它在更新单个项目后是最新的。