Restangular put() 不适用于多个 put()
Restangular put() not working on multiple put()'s
这是有问题的代码
function putCategory(category) {
console.log(category.parent_id);
category.put().then(function (data) {
console.log(data.parent_id);
delete category._updating;
angular.extend(category, data);
updateCategories();
}, function (error) {
delete category._updating;
category.errors = readError(error);
});
}
下面是问题的简要示例:
- 初始状态:parent_id = null(它是根类别)
- 将parent_id改为1,调用putCategory。
- 类别更新正确(parent_id = 1)。
- 决定我希望 parent_id 为 2。再次调用 putCategory。
- 类别不更新,并保持相同状态 (parent_id = 1)。似乎没有进一步的更新。
- 如果我刷新页面,parent_id 仍然是 1。所以至少第一个 put() 有效
- 然后我可以进行另一个更改,它会起作用,但第二个(或第三个等)不会。所以我可以将它改回 null 或 2,但是除非我再次刷新它,否则任何其他更改都不会起作用。基本上每个页面加载每个对象获得 1 个正确的放置请求。
当我检查控制台日志时,输入数据是正确的(第一个控制台日志),第二个控制台日志第一次正确,第二次(及以后)错误。
当我查看网络选项卡时,我可以看到传出参数也是第一次正确,第二次错误。
据我所知,put() 调用无法正常工作,有人知道为什么吗?
Restangular 对元素的 this
绑定做了一些棘手的事情(请参阅 Copying elements 了解另一个有问题的场景)。
问题很可能出在您的通话 angular.extend(category, data);
中。此调用复制所有可枚举属性(包括 Restangular 方法),同时更新元素的字段(例如 id、名称、日期)就足够了。
最简单的解决方案是使用响应的 plain()
功能。此函数 returns 您收到的纯数据对象,因此您可以使用它专门复制您的数据字段。
category.put().then(function (data) {
console.log(data.parent_id);
delete category._updating;
angular.extend(category, data.plain());
updateCategories();
});
这是有问题的代码
function putCategory(category) {
console.log(category.parent_id);
category.put().then(function (data) {
console.log(data.parent_id);
delete category._updating;
angular.extend(category, data);
updateCategories();
}, function (error) {
delete category._updating;
category.errors = readError(error);
});
}
下面是问题的简要示例:
- 初始状态:parent_id = null(它是根类别)
- 将parent_id改为1,调用putCategory。
- 类别更新正确(parent_id = 1)。
- 决定我希望 parent_id 为 2。再次调用 putCategory。
- 类别不更新,并保持相同状态 (parent_id = 1)。似乎没有进一步的更新。
- 如果我刷新页面,parent_id 仍然是 1。所以至少第一个 put() 有效
- 然后我可以进行另一个更改,它会起作用,但第二个(或第三个等)不会。所以我可以将它改回 null 或 2,但是除非我再次刷新它,否则任何其他更改都不会起作用。基本上每个页面加载每个对象获得 1 个正确的放置请求。
当我检查控制台日志时,输入数据是正确的(第一个控制台日志),第二个控制台日志第一次正确,第二次(及以后)错误。
当我查看网络选项卡时,我可以看到传出参数也是第一次正确,第二次错误。
据我所知,put() 调用无法正常工作,有人知道为什么吗?
Restangular 对元素的 this
绑定做了一些棘手的事情(请参阅 Copying elements 了解另一个有问题的场景)。
问题很可能出在您的通话 angular.extend(category, data);
中。此调用复制所有可枚举属性(包括 Restangular 方法),同时更新元素的字段(例如 id、名称、日期)就足够了。
最简单的解决方案是使用响应的 plain()
功能。此函数 returns 您收到的纯数据对象,因此您可以使用它专门复制您的数据字段。
category.put().then(function (data) {
console.log(data.parent_id);
delete category._updating;
angular.extend(category, data.plain());
updateCategories();
});