Restangular put()不能处理多个put()' s

时间:2015-04-10 21:22:32

标签: angularjs restangular

以下是有问题的代码

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请求。

当我检查控制台日志时,输入数据是正确的(第一个控制台日志),第二次控制台日志第一次是正确的,第二次(以及之后)是错误的。

当我查看网络选项卡时,我可以看到传出的参数第一次也是正确的,第二次也是错误的。

所以我可以说,put()调用无法正常工作,有没有人知道为什么?

1 个答案:

答案 0 :(得分:2)

Restangular通过元素的this绑定做了一些棘手的事情(对于另一个有问题的场景,请参阅Copying elements)。 问题很可能出在您的电话angular.extend(category, data);中。此调用复制所有可枚举属性(包括Restangular方法),同时更新元素的字段(例如id,name,date)就足够了。

最简单的解决方案是使用响应的plain()功能。此函数返回您收到的纯数据对象,因此您可以使用它来专门复制数据字段。

category.put().then(function (data) {
            console.log(data.parent_id);
            delete category._updating;
            angular.extend(category, data.plain());
            updateCategories();
        });