Javascript 控制何时使用restangular save方法调用put vs post?

Javascript 控制何时使用restangular save方法调用put vs post?,javascript,restangular,Javascript,Restangular,我正在使用一个正则化元素并试图保存它。如果它是一个新元素,它会以我想要的格式调用post 但是,对于已更改的现有元素,它尝试调用put。我使用的rest接口没有put命令,而是使用带有元素id的post来更新该元素 有没有一种简单的方法可以让save方法意识到我希望它在调用save方法时使用post和元素id,而不是put?我必须完全覆盖该方法吗 顺便说一句,正如我所能说的那样,矩形使用POST来表示新元素,并表示该元素以前是否存在,但我不确定这一点。有人能告诉我矩形是如何决定哪个电话是合适的吗

我正在使用一个正则化元素并试图保存它。如果它是一个新元素,它会以我想要的格式调用post

但是,对于已更改的现有元素,它尝试调用put。我使用的rest接口没有put命令,而是使用带有元素id的post来更新该元素

有没有一种简单的方法可以让save方法意识到我希望它在调用save方法时使用post和元素id,而不是put?我必须完全覆盖该方法吗

顺便说一句,正如我所能说的那样,矩形使用POST来表示新元素,并表示该元素以前是否存在,但我不确定这一点。有人能告诉我矩形是如何决定哪个电话是合适的吗?文件只是说,它将“决定”呼叫哪一个

编辑:

我找到了一个非常简单的解决方案,在我的例子中效果很好,因为我们连接的REST接口在任何地方都没有使用PUT。我在初始化工厂中添加了以下行:

Restangular.setMethodOverriders(["put", "post"]);
实际上,这将每个put调用更改为post调用。因为我们的格式是restful的,而不是使用Puts,所以它工作得很好。现在,我们只需在任何重新格式化的元素上调用save,它就可以正常工作。

我检查了,发现了以下内容:

  function save(params, headers) {
    if (this[config.restangularFields.fromServer]) {
      return this[config.restangularFields.put](params, headers);
    } else {
      return _.bind(elemFunction, this)('post', undefined, params, undefined, headers);
    }
  }
所以,Restangular不同于您创建和重新设置语言的javascript对象,也不同于您通过Restangular方法获得的对象(类似于
get
方法)。如果是第一个元素,它将使用
POST
,因为在本地重新设置元素的角度意味着它在远程位置不存在。在第一次保存后,或者如果您从远程源提取,它将使用
PUT

这种行为非常适合REST,因为创建对象的
POST
和更新的
PUT
是RESTAPI经常使用的方法。有关示例,请参见

针对您的具体情况,有(至少)以下两种解决方案:


如果您有权访问API,或者通常使用重新语法化元素的
post
方法,请更新API以允许
put
进行更新。我建议不要直接更改
config.restangularFields.fromServer
字段,也不要覆盖Restangular的
save
方法(虽然两者都可以使用)。

我使用了另一种非常有效的方法,因为我无法更改rest后端,但是你确实回答了我的一些问题,所以谢谢:)我将发布我在原始问题中使用的解决方案,以防以后对其他人有所帮助。你所需要的是在重新角度化的模型上将
从服务器设置为true