这是一个我一直在思考的问题,但不想问,因为我不确定如何描述它..我仍然不确定是否我可以很好地描述它,但在这里它... ..
我有一个网络应用程序,允许您操作页面上的一堆元素,但有一个保存按钮。当我点击保存时,我想在一个POST(不是递增)中创建/更新所有这些更改。如果这些html元素是第一次在页面上创建的,我想将它们作为新条目插入到数据库中。当这些更改首次保存在数据库中(已创建)时,我返回索引ID,因此如果我再次进行更改,它们将在数据库中更新,而不是再次创建。
令人困难的是批量保存,因此它不占用所有这些带宽。我希望能够混合和匹配创建和更新,但是从创建的元素发回ID并将它们映射到正确的html元素(因此它们将在下次更新)需要我了解每个批处理元素的顺序这导致了一些问题。我想知道是否有一种聪明的方法来创建或更新,并在一个ajax请求下正确地将ID映射回各种元素。
希望这很清楚,如果您需要澄清,请告诉我
谢谢, 马特穆勒
答案 0 :(得分:2)
您可以对新创建的元素使用负自动递减ID,并将映射从负值返回到正值。例如,发送[{id: 507, name: "foo"}, {id: -1, name: "bar"}, {id: -2, name: "baz"}]
,返回{-1: 510, -2: 511}
,并让您的javascript根据地图更新其ID。
答案 1 :(得分:1)
好吧,加载后,从db中获取next ID
,所以你知道,在数据库中下一页的部分是什么ID。然后,在创建时,在javascript中你可以使用它 - 即:
下一个ID是15,所以当你添加下一个字段时,它的ID是16并且堆栈中有ID 17 ...当你删除一个新创建的字段时,将每个较高的ID向下移动都没有问题。
然后,在您的保存脚本中,您知道,每个ID大于您之前获取的ID都是“要保存”,并且每个ID都要更新。
答案 2 :(得分:1)
如果您的页面知道何时创建了新元素,那么它应该为该组参数(即,要添加的实体的属性)安排“id”参数为null(未提供)或一些标记值。已有的实体具有其ID值,客户端无法更改。服务器只需要将具有空ID值的参数组与具有非空值的参数组分开。
您的客户可能还想标记要删除的元素。在这种情况下,已经存在的实体将返回其ID,其中一些标志参数指示“DELETE ME”。在“提交”之前创建然后删除的实体不需要服务器处理。