表单修改方法、装置、存储介质和电子设备与流程

文档序号:17489385发布日期:2019-04-23 20:18阅读:199来源:国知局
表单修改方法、装置、存储介质和电子设备与流程

本公开涉及计算机技术领域,具体地,涉及一种表单修改方法、装置、存储介质和电子设备。



背景技术:

现有的表单设计器,在进行表单修改操作时都是直接基于表单的表单模型(也称为表单图形模型、表单绘图模型)直接进行修改,但是这种方式容易造成性能的损耗,这是由于每次对表单模型的修改都会触发表单的重新绘制。

例如我们通常在一个事件中同时操作多个节点,这些节点可能有相同的父节点,但是每修改一次子节点,就会导致一次重新绘制,特别是在有些情况下,可能只修改了个别节点,但是也需要对整个表单模型进行重新绘制。由此可见,在现有技术中,每次对表单模型的修改都会触发表单的重新绘制,会造成不必要的资源消耗,从而造成性能损耗。



技术实现要素:

本公开的目的是提供一种表单修改方法、装置、存储介质和电子设备,用于解决现有技术中容易造成性能损耗的问题。

为了实现上述目的,本公开的第一方面,提供一种表单修改方法,所述方法包括:

根据当前表单的原始表单模型,生成所述当前表单的第一虚拟表单模型,所述第一虚拟表单模型与所述原始表单模型一致;

当检测到对所述当前表单的第一操作时,将复制所述第一虚拟表单模型得到的第二虚拟表单模型放入当前的事件循环内,用于使所述事件循环内发生的针对所述当前表单的所有的修改操作均作用于所述第二虚拟表单模型上,所述事件循环是由所述第一操作触发产生,并在所述第一操作中断时结束;

根据所述事件循环结束后得到的第三虚拟表单模型与所述第一虚拟表单模型的对比结果,对所述原始表单模型进行修改,所述第三虚拟表单模型是所述第二虚拟表单模型经过所述事件循环内的所述所有的修改操作修改后得到的。

可选地,所述根据所述事件循环结束后得到的第三虚拟表单模型与所述第一虚拟表单模型的对比结果,对所述原始表单模型进行修改,包括:

根据所述第三虚拟表单模型中的每层的节点与所述第一虚拟表单模型中的同层的节点的对比结果,对所述原始表单模型中的同层节点进行修改操作,以将所述原始表单模型修改为与所述第三虚拟表单模型一致。

可选地,所述根据所述第三虚拟表单模型中的每层的节点与所述第一虚拟表单模型中的同层的节点的对比结果,对所述原始表单模型中的同层节点进行修改操作,以将所述原始表单模型修改为与所述第三虚拟表单模型一致,包括:

在将所述第三虚拟表单模型中的第i层与所述第一虚拟表单模型中的第i层进行对比时,将所述第三虚拟表单模型中的第i层中的节点作为第一组,将所述第一虚拟表单模型中的第i层中的节点作为第二组,i为正整数,i的起始值为1;

将第一头索引设置在所述第一组中的首节点处,第一尾索引设置在所述第一组中的尾节点处,以及将所述第二头索引设置在所述第二组中的首节点处,第二尾索引设置在所述第二组中的尾节点处;

执行所述第一组和所述第二组的节点对比流程,以根据对比结果对所述原始表单模型的第i层中的节点进行修改;

取i=i+1,并重复执行所述在将所述第三虚拟表单模型中的第i层与所述第一虚拟表单模型中的第i层进行对比时,将所述第三虚拟表单模型中的第i层中的节点作为第一组,将所述第一虚拟表单模型中的第i层中的节点作为第二组,至所述执行所述第一组和所述第二组的节点对比流程,以根据对比结果对所述原始表单模型的第i层中的节点进行修改的步骤,直至将所述原始表单模型修改为与所述第三虚拟表单模型一致。

可选地,所述执行所述第一组和所述第二组的节点对比流程,以根据对比结果对所述原始表单模型的第i层中的节点进行修改,包括:

当所述第一头索引所指的节点和所述第二头索引所指的节点相同时,将所述第一头索引指向所述第一组的下一个节点,所述第二头索引指向所述第二组的下一个节点,并重新执行所述节点对比流程;

当所述第一头索引所指的节点和所述第二头索引所指的节点不同时,判断所述第一尾索引所指的节点和所述第二尾索引所指的节点是否相同;

当所述第一尾索引所指的节点和所述第二尾索引所指的节点相同时,将所述第一尾索引指向所述第一组的上一个节点,所述第二尾索引指向所述第二组的上一个节点,并重新执行所述节点对比流程;

当所述第一尾索引所指的节点和所述第二尾索引所指的节点不同时,判断所述第一尾索引所指的节点和所述第二头索引所指的节点是否相同;

当所述第一尾索引所指的节点和所述第二头索引所指的节点相同时,在所述原始表单模型中的第i层中将所述第一尾索引所指的节点移动至所述第二尾索引所指的节点之后,并将所述第一尾索引指向所述第一组的上一个节点,所述第二头索引指向所述第二组的下一个节点,并重新执行所述节点对比流程;

当所述第一尾索引所指的节点和所述第二头索引所指的节点不同时,判断所述第一头索引所指的节点和所述第二尾索引所指的节点是否相同;

当所述第一头索引所指的节点和所述第二尾索引所指的节相同时,在所述原始表单模型中的第i层中将所述第一头索引所指的节点移动至所述第二头索引所指的节点之前,并将所述第一头索引指向所述第一组的下一个节点,所述第二尾索引指向所述第二组的上一个节点,并重新执行所述节点对比流程;

当所述第一头索引所指的节点和所述第二尾索引所指的节不同时,遍历所述第二头索引到所述第二尾索引之间的所有节点,以确定是否存在所述第一头索引所指的节点;

当不存在所述第一头索引所指的节点时,在所述原始表单模型中的第i层中将所述第一头索引所指的节点移动至所述第二头索引所指的节点之前,并将所述第一头索引指向所述第一组的下一个节点,并重新执行所述节点对比流程;

当存在所述第一头索引所指的节点时,在所述原始表单模型中的第i层中将所述第一头索引所指的节点移动至所述第二头索引所指的节点之前,将所述第一头索引所指的节点在所述第二组中标记为已处理,并将所述第一头索引指向所述第一组的下一个节点,并重新执行所述节点对比流程;

当所述第一头索引与所述第一尾索引先相遇时,将所述第二组中从所述第二头索引到所述第二尾索引之间的所有节点,在所述原始表单模型中的第i层中删除;

当所述第二头索引与所述第二尾索引先相遇时,将所述第二组中从所述第二头索引到所述第二尾索引之间的所有节点,在所述原始表单模型中的第i层中插入至所述第二尾索引所指的节点之前。

可选地,所述将所述第二组中从所述第二头索引到所述第二尾索引之间的所有节点,在所述原始表单模型中的第i层中删除,包括:

当所述所有节点中的第一节点存在子节点时,在删除所述第一节点时将所述第一节点和所述第一节点的所有子节点一起删除,所述第一节点为所述所有节点中的任一节点。

第二方面,提供一种表单修改装置,所述装置包括:

生成模块,用于根据当前表单的原始表单模型,生成所述当前表单的第一虚拟表单模型,所述第一虚拟表单模型与所述原始表单模型一致;

预修改模块,用于当检测到对所述当前表单的第一操作时,将复制所述第一虚拟表单模型得到的第二虚拟表单模型放入当前的事件循环内,用于使所述事件循环内发生的针对所述当前表单的所有的修改操作均作用于所述第二虚拟表单模型上,所述事件循环是由所述第一操作触发产生,并在所述第一操作中断时结束;

表单修改模块,用于根据所述事件循环结束后得到的第三虚拟表单模型与所述第一虚拟表单模型的对比结果,对所述原始表单模型进行修改,所述第三虚拟表单模型是所述第二虚拟表单模型经过所述事件循环内的所述所有的修改操作修改后得到的。

可选地,所述表单修改模块,用于:

根据所述第三虚拟表单模型中的每层的节点与所述第一虚拟表单模型中的同层的节点的对比结果,对所述原始表单模型中的同层节点进行修改操作,以将所述原始表单模型修改为与所述第三虚拟表单模型一致。

可选地,所述表单修改模块,包括:

分组子模块,用于在将所述第三虚拟表单模型中的第i层与所述第一虚拟表单模型中的第i层进行对比时,将所述第三虚拟表单模型中的第i层中的节点作为第一组,将所述第一虚拟表单模型中的第i层中的节点作为第二组,i为正整数,i的起始值为1;

索引配置子模块,用于将第一头索引设置在所述第一组中的首节点处,第一尾索引设置在所述第一组中的尾节点处,以及将所述第二头索引设置在所述第二组中的首节点处,第二尾索引设置在所述第二组中的尾节点处;

对比子模块,用于执行所述第一组和所述第二组的节点对比流程,以根据对比结果对所述原始表单模型的第i层中的节点进行修改;

循环子模块,用于取i=i+1,并重复执行所述在将所述第三虚拟表单模型中的第i层与所述第一虚拟表单模型中的第i层进行对比时,将所述第三虚拟表单模型中的第i层中的节点作为第一组,将所述第一虚拟表单模型中的第i层中的节点作为第二组,至所述执行所述第一组和所述第二组的节点对比流程,以根据对比结果对所述原始表单模型的第i层中的节点进行修改的步骤,直至将所述原始表单模型修改为与所述第三虚拟表单模型一致。

可选地,所述对比子模块,用于:

当所述第一头索引所指的节点和所述第二头索引所指的节点相同时,将所述第一头索引指向所述第一组的下一个节点,所述第二头索引指向所述第二组的下一个节点,并重新执行所述节点对比流程;

当所述第一头索引所指的节点和所述第二头索引所指的节点不同时,判断所述第一尾索引所指的节点和所述第二尾索引所指的节点是否相同;

当所述第一尾索引所指的节点和所述第二尾索引所指的节点相同时,将所述第一尾索引指向所述第一组的上一个节点,所述第二尾索引指向所述第二组的上一个节点,并重新执行所述节点对比流程;

当所述第一尾索引所指的节点和所述第二尾索引所指的节点不同时,判断所述第一尾索引所指的节点和所述第二头索引所指的节点是否相同;

当所述第一尾索引所指的节点和所述第二头索引所指的节点相同时,在所述原始表单模型中的第i层中将所述第一尾索引所指的节点移动至所述第二尾索引所指的节点之后,并将所述第一尾索引指向所述第一组的上一个节点,所述第二头索引指向所述第二组的下一个节点,并重新执行所述节点对比流程;

当所述第一尾索引所指的节点和所述第二头索引所指的节点不同时,判断所述第一头索引所指的节点和所述第二尾索引所指的节点是否相同;

当所述第一头索引所指的节点和所述第二尾索引所指的节相同时,在所述原始表单模型中的第i层中将所述第一头索引所指的节点移动至所述第二头索引所指的节点之前,并将所述第一头索引指向所述第一组的下一个节点,所述第二尾索引指向所述第二组的上一个节点,并重新执行所述节点对比流程;

当所述第一头索引所指的节点和所述第二尾索引所指的节不同时,遍历所述第二头索引到所述第二尾索引之间的所有节点,以确定是否存在所述第一头索引所指的节点;

当不存在所述第一头索引所指的节点时,在所述原始表单模型中的第i层中将所述第一头索引所指的节点移动至所述第二头索引所指的节点之前,并将所述第一头索引指向所述第一组的下一个节点,并重新执行所述节点对比流程;

当存在所述第一头索引所指的节点时,在所述原始表单模型中的第i层中将所述第一头索引所指的节点移动至所述第二头索引所指的节点之前,将所述第一头索引所指的节点在所述第二组中标记为已处理,并将所述第一头索引指向所述第一组的下一个节点,并重新执行所述节点对比流程;

当所述第一头索引与所述第一尾索引先相遇时,将所述第二组中从所述第二头索引到所述第二尾索引之间的所有节点,在所述原始表单模型中的第i层中删除;

当所述第二头索引与所述第二尾索引先相遇时,将所述第二组中从所述第二头索引到所述第二尾索引之间的所有节点,在所述原始表单模型中的第i层中插入至所述第二尾索引所指的节点之前。

可选地,所述对比子模块,用于:

当所述所有节点中的第一节点存在子节点时,在删除所述第一节点时将所述第一节点和所述第一节点的所有子节点一起删除,所述第一节点为所述所有节点中的任一节点。

第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述方法的步骤。

第四方面,提供一种电子设备,包括:存储器,其上存储有计算机程序;

处理器,用于执行所述存储器中的所述计算机程序,以实现第二方面所述方法的步骤。

在上述技术方案中,根据当前表单的原始表单模型,生成当前表单的第一虚拟表单模型,该第一虚拟表单模型与原始表单模型一致;当检测到对当前表单的第一操作时,将复制第一虚拟表单模型得到的第二虚拟表单模型放入当前的事件循环内,用于使事件循环内发生的针述当前表单的所有的修改操作均作用于第二虚拟表单模型上,该事件循环是由第一操作触发产生,并在该第一操作中断时结束;根据事件循环结束后得到的第三虚拟表单模型与第一虚拟表单模型的对比结果,对该原始表单模型进行修改,该第三虚拟表单模型是该第二虚拟表单模型经过该事件循环内的所有的修改操作修改后得到的。通过上述技术方案,能够在一个事件循环内对虚拟表单模型进行多次修改,从而不必每次修改表单模型都触发表单的重新绘制,而是在事件循环后再根据事件循环内对虚拟表单模型的多次修改在原始表单模型上进行修改,从而可以针对事件循环内的多次修改操作进行一次表单重绘,因此能够避免不必要的资源消耗,降低性能损耗。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据本公开一示例性实施例示出的一种表单修改方法的流程示意图。

图2是根据本公开一示例性实施例示出的另一种表单修改方法的流程示意图。

图3a是根据图2所示实施例示出的一种节点对比流程的示意图。

图3b是根据图2所示实施例示出的另一种节点对比流程的示意图。

图3c是根据图2所示实施例示出的又一种节点对比流程的示意图。

图3d是根据图2所示实施例示出的又一种节点对比流程的示意图。

图3e是根据图2所示实施例示出的又一种节点对比流程的示意图。

图3f是根据图2所示实施例示出的又一种节点对比流程的示意图。

图3g是根据图2所示实施例示出的又一种节点对比流程的示意图。

图3h是根据图2所示实施例示出的又一种节点对比流程的示意图。

图4是根据本公开一示例性实施例示出的一种表单修改装置的框图。

图5是根据本公开一示例性实施例示出的一种表单修改模块的框图。

图6是根据一示例性实施例示出的一种电子设备的框图。

图7是根据一示例性实施例示出的另一种电子设备的框图。

具体实施方式

以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

图1是根据本公开一示例性实施例示出的一种表单修改方法的流程示意图,如图1所示,该方法可以包括以下步骤:

步骤101,根据当前表单的原始表单模型,生成当前表单的第一虚拟表单模型,该第一虚拟表单模型与该原始表单模型一致。

示例的,生成当前表单的第一虚拟表单模型,可以理解为复制该原始表单模型,将该原始表单模型的复制模型作为该第一虚拟表单模型。另外,由于表单模型中包括多个节点,以及该多个节点的上下层级关系,因此一个表单模型也可以看作是一个节点树。因此,该第一虚拟表单模型与该原始表单模型一致可以理解为:该第一虚拟表单模型与该原始表单模型的节点树相同,即第一虚拟表单模型中每一层的节点与该原始表单模型中同一层的节点相同,同一层的同一节点在该层中的顺序也相同,同一层的同一节点的父节点和子节点也相同。

步骤102,当检测到对当前表单的第一操作时,将复制第一虚拟表单模型得到的第二虚拟表单模型放入当前的事件循环内,用于使事件循环内发生的针对当前表单的所有的修改操作均作用于第二虚拟表单模型上,该事件循环是由该第一操作触发产生,并在该第一操作中断时结束。

其中,复制第一虚拟表单模得到第二虚拟表单模型,可以理解为复制第一虚拟表单模型,将该第一虚拟表单模型的复制模型作为该第二虚拟表单模型,由于该第一虚拟表单模型是复制原始表单模型得到的,因此该第二虚拟表单模型与原始表单模型也是一致的,因此该第二虚拟表单模型与该原始表单模型的节点树也是相同的。

当检测到对当前表单的第一操作时,触发产生当前的事件循环,然后将该第二虚拟表单模型放入该事件循环内,在事件循环结束之前,针对该当前表单的所有修改操作,均在该第二虚拟表单模型上进行,而不对原始表单模型进行处理,从而可以避免由于原始表单模型的修改而引起的表单重新绘制。当该第一操作中断时,可以认为该第一操作已结束,因此可以确认事件循环结束,由于事件循环内发生的针对当前表单的所有的修改操作均作用于第二虚拟表单模型上,因此此时该第二虚拟表单模型可能已经经过了一次或多次修改。

其中上述的第一操作可以是针对当前表单的任意一种编辑操作,例如添加、删除、拖动表单中的某一表项,则可能会引起表单模型的节点树上的一个或多个节点的变化。以第一操作为拖动操作为例,用户拖动表单中的某一表项时,可能会引起多个节点的变化(如位置变化),而用户持续拖动时,节点的变化可能也在持续,因此对于用户而言只是一次拖动操作,但是实际上需要持续地对表单模型进行多次修改,在本实施例里,在用户开始拖动后,本次事件循环开始,只要用户的这次拖动操作未中断,则针对表单的所有修改操作均作用在该第二虚拟表单模型上,直至用户停止拖动时,该第一操作中断,事件循环结束。

步骤103,根据该事件循环结束后得到的第三虚拟表单模型与该第一虚拟表单模型的对比结果,对该原始表单模型进行修改,该第三虚拟表单模型是该第二虚拟表单模型经过事件循环内的所有的修改操作修改后得到的。

当事件循环结束后,即可得到经过事件循环内的所有的修改操作修改后的第二虚拟表单模型,即该第三虚拟表单模型。然后通过对比第三虚拟表单模型与该第一虚拟表单模型,即可确定该第一虚拟表单模型中的哪些节点发生了变化(例如哪些层的哪些节点被删除、哪些层的哪些位置增加了新节点,哪些层的哪些节点的位置发生变化等等),从而也就确定了原始表单模型中的哪些节点发生了变化,从而可以根据该对比结果,对该原始表单模型进行修改,即可将该原始表单模型修改为与第三虚拟表单模型一致,从而在完成修改后进行表单的重新绘制,即可得到第三虚拟表单模型所对应的表单。

进一步的,考虑到节点变化很少是跨层次的,因此我们采取的是一种简化的思路,在对比第三虚拟表单模型和第一虚拟表单模型时,只比较同层节点。因此步骤103所述的根据事件循环结束后得到的第三虚拟表单模型与该第一虚拟表单模型的对比结果,对该原始表单模型进行修改,可以包括:

步骤1031,根据第三虚拟表单模型中的每层的节点与第一虚拟表单模型中的同层的节点的对比结果,对该原始表单模型中的同层节点进行修改操作,以将该原始表单模型修改为与该第三虚拟表单模型一致。

图2是根据本公开一示例性实施例示出的另一种表单修改方法的流程示意图,如图2所示,步骤1031所述的根据该第三虚拟表单模型中的每层的节点与该第一虚拟表单模型中的同层的节点的对比结果,对该原始表单模型中的同层节点进行修改操作,以将该原始表单模型修改为与该第三虚拟表单模型一致,可以包括以下步骤:

步骤1031,在将第三虚拟表单模型中的第i层与第一虚拟表单模型中的第i层进行对比时,将第三虚拟表单模型中的第i层中的节点作为第一组,将第一虚拟表单模型中的第i层中的节点作为第二组。

其中,i为正整数,i的起始值为1,即从第三虚拟表单模型中的第1层和第一虚拟表单模型中的第1层起,将第三虚拟表单模型的每一层和第一虚拟表单模型中的同一层中的节点进行逐层对比。

步骤1032,将第一头索引设置在第一组中的首节点处,第一尾索引设置在第一组中的尾节点处,以及将第二头索引设置在第二组中的首节点处,第二尾索引设置在第二组中的尾节点处。

步骤1033,执行第一组和第二组的节点对比流程,以根据对比结果对原始表单模型的第i层中的节点进行修改。该步骤1033可以包括以下步骤:

(1)当第一头索引所指的节点和第二头索引所指的节点相同时,将第一头索引指向第一组的下一个节点,第二头索引指向第二组的下一个节点,并重新执行该节点对比流程。示例的,对于任意两个节点,如果这两个节点中的关键属性的值相同,则可以认为这两个节点相同,如果这两个节点中的存在至少一种关键属性的值不同,则可以认为这两个节点是不同节点。其中,关键属性可以是预先指定的一种或多种属性。

(2)当第一头索引所指的节点和第二头索引所指的节点不同时,判断第一尾索引所指的节点和第二尾索引所指的节点是否相同;

(3)当第一尾索引所指的节点和第二尾索引所指的节点相同时,将第一尾索引指向第一组的上一个节点,第二尾索引指向第二组的上一个节点,并重新执行该节点对比流程。

(4)当第一尾索引所指的节点和第二尾索引所指的节点不同时,判断将第一尾索引所指的节点和第二头索引所指的节点是否相同。

(5)当第一尾索引所指的节点和第二头索引所指的节点相同时,在原始表单模型中的第i层中将第一尾索引所指的节点移动至第二尾索引所指的节点之后,并将第一尾索引指向第一组的上一个节点,第二头索引指向第二组的下一个节点,并重新执行该节点对比流程。

(6)当第一尾索引所指的节点和第二头索引所指的节点不同时,判断第一头索引所指的节点和第二尾索引所指的节点是否相同。

(7)当第一头索引所指的节点和第二尾索引所指的节相同时,在原始表单模型中的第i层中将第一头索引所指的节点移动至第二头索引所指的节点之前,并将第一头索引指向第一组的下一个节点,第二尾索引指向第二组的上一个节点,并重新执行该节点对比流程。

(8)当第一头索引所指的节点和第二尾索引所指的节不同时,遍历第二头索引到第二尾索引之间的所有节点,以确定是否存在第一头索引所指的节点。

(9)当不存在第一头索引所指的节点时,在原始表单模型中的第i层中将第一头索引所指的节点移动至第二头索引所指的节点之前,并将第一头索引指向第一组的下一个节点,并重新执行该节点对比流程;

(10)当存在第一头索引所指的节点时,在原始表单模型中的第i层中将第一头索引所指的节点移动至第二头索引所指的节点之前,将第一头索引所指的节点在第二组中标记为已处理,并将第一头索引指向第一组的下一个节点,并重新执行该节点对比流程。

其中,将节点标记为已处理后,在后续的索引移动过程中,可以直接跳过该节点,以及针对该节点的其他处理也可以忽略。

重复执行上述的步骤(1)至(10),直至第一头索引与第一尾索引相遇,或者第二头索引与第二尾索引先相遇,并执行以下步骤:

(11)当第一头索引与第一尾索引先相遇时,将第二组中从第二头索引到第二尾索引之间的所有节点,在原始表单模型中的第i层中删除。

(12)当第二头索引与第二尾索引先相遇时,将第二组中从第二头索引到第二尾索引之间的所有节点,在原始表单模型中的第i层中插入至第二尾索引所指的节点之前。

此时就完成了第三虚拟表单模型中的第i层与第一虚拟表单模型中的第i层的对比,也完成了原始表单模型中的第i层的修改,因此可以进行下一层的对比。

故取i=i+1,并重复执行步骤1031至步骤1033,直至将该原始表单模型修改为与该第三虚拟表单模型一致。

下面对上述步骤1033所示的节点对比流程进行举例说明,假设第一虚拟表单模型中的第i层和第三虚拟表单模型中的第i层中均包含10个节点,如图3a所示,图3a是根据图2所示实施例示出的一种节点对比流程的示意图,在图3a中示出了原始表单模型中的第i层的10个节点,按顺序依次为节点1到节点10,也示出了第一虚拟表单模型中的第i层的10个节点,按顺序依次为节点1-10,以及示出了第三虚拟表单模型中的第i层中的10个节点,按顺序依次为节点1、节点9、节点11、节点7、节点3-6、节点2以及节点10。即第一虚拟表单模型中的第i层的10个节点是修改前的样子,与原始表单模型中的第i层一致,第三虚拟表单模型中的第i层中的10个节点是修改后的。下面将第三虚拟表单模型中的第i层中的10个节点作为第一组,将第一虚拟表单模型中的第i层的节点1-10作为第二组,将第一头索引和第一尾索引设置在第一组中,将第二头索引和第二尾索引设置在第二组中。其中,如图3a所示,当前第一头索引指向第一组的节点1,第一尾索引指向第一组的节点10,第二头索引指向第一组的节点1,第二尾索引指向第二组的节点10。

首先,按照步骤1033中的步骤(1),判断当前第一头索引所指的节点和第二头索引所指的节点是否相同,由于当前第一头索引所指的节点是节点1,第二头索引所指的节点也是节点1,因此将第一头索引指向第一组的下一个节点,即节点9,将第二头索引指向第二组的下一个节点,即节点2,此时的第一头索引和第二头索引的位置如图3b所示。

然后,重新从步骤1033中的步骤(1)开始判断,根据图3b所示,此时由于第一头索引所指的是节点9,第二头索引所指的是节点2,因此第一头索引所指的节点和第二头索引所指的节点不同,需要按照步骤1033中的步骤(2)进行判断,即判断第一尾索引所指的节点和第二尾索引所指的节点是否相同,由于当前第一尾索引所指的节点是节点10,第二尾索引所指的节点也是节点10,因此按照步骤1033中的步骤(3)将第一尾索引指向第一组的上一个节点,即节点2,将第二尾索引指向第二组的上一个节点,即节点9,此时的第一尾索引和第二尾索引的位置如图3c所示。

然后,再次重新从步骤1033中的步骤(1)开始判断,根据图3c所示,此时由于第一头索引所指的是节点9,第二头索引所指的是节点2,第一尾索引所指的是节点2,第二尾索引所指的是节点9,因此第一头索引所指的节点和第二头索引所指的节点不同,第一尾索引所指的节点和第二尾索引所指的节点也不同,故不满足上述的步骤(1)和(2),需要按照步骤1033中的步骤(4)进行判断,即判断将第一尾索引所指的节点和第二头索引所指的节点是否相同,由于此时第一尾索引所指的节点为节点2,第二头索引所指的节点也为节点2,因此第一尾索引所指的节点和第二头索引所指的节点相同,可以执行步骤(5),在原始表单模型中的第i层中将第一尾索引所指的节点,即节点2,移动至第二尾索引所指的节点,即节点9之后,并将第一尾索引指向第一组的上一个节点,即节点6,将第二头索引指向第二组的下一个节点,即节点3。此时的第一尾索引和第二头索引的位置,以及修改后的原始表单模型中的第i层如图3d所示。

然后,再次重新从步骤1033中的步骤(1)开始判断,根据图3d所示,此时由于第一头索引所指的是节点9,第二头索引所指的是节点3,第一尾索引所指的是节点6,第二尾索引所指的是节点9,因此不满足上述的步骤(1)至(5),需要按照步骤1033中的步骤(6)进行判断,即判断第一头索引所指的节点和第二尾索引所指的节点是否相同,由于第一头索引所指的节点是节点9,第二尾索引所指的节点也是节点9,因此可以执行步骤(7),即在原始表单模型中的第i层中将第一头索引所指的节点,即节点9移动至第二头索引所指的节点,即节点3之前,并将第一头索引指向第一组的下一个节点,即节点11,将第二尾索引指向第二组的上一个节点,即节点8。此时的第一头索引和第二尾索引的位置,以及修改后的原始表单模型中的第i层如图3e所示。

然后,再次重新从步骤1033中的步骤(1)开始判断,根据图3e所示,此时由于第一头索引所指的是节点11,第二头索引所指的是节点3,第一尾索引所指的是节点6,第二尾索引所指的是节点8,因此不满足上述的步骤(1)至(7),需要执行步骤1033中的步骤(8),即遍历第二头索引到第二尾索引之间的所有节点,以确定是否存在第一头索引所指的节点。根据图3e所示,第二头索引到第二尾索引之间的所有节点为节点3-8,因此不存在第一头索引所指的节点11。因此需要进一步执行步骤1033中的步骤(9),即在原始表单模型中的第i层中将第一头索引所指的节点,即节点11移动至第二头索引所指的节点,即节点3之前,并将第一头索引指向第一组的下一个节点,即指向节点7。此时的第一头索引位置,以及修改后的原始表单模型中的第i层如图3f所示。

然后,再次重新从步骤1033中的步骤(1)开始判断,根据图3f所示,由于第一头索引所指的是节点7,第二头索引所指的是节点3,第一尾索引所指的是节点6,第二尾索引所指的是节点8,因此不满足上述的步骤(1)至(7),需要执行步骤1033中的步骤(8),遍历第二头索引到第二尾索引之间的所有节点,以确定是否存在第一头索引所指的节点。根据图3f所示,第二头索引到第二尾索引之间的所有节点为节点3-8,因此存在第一头索引所指的节点7。因此,需要进一步执行步骤1033中的步骤(10),在原始表单模型中的第i层中将第一头索引所指的节点,即节点7移动至第二头索引所指的节点,即节点3之前,并将第一头索引所指的节点7在第二组中标记为已处理,并将第一头索引指向第一组的下一个节点,即节点3。此时的第一头索引位置,以及修改后的原始表单模型中的第i层如图3g所示。

然后,再次重新从步骤1033中的步骤(1)开始判断,根据图3g所示,由于第一头索引所指的是节点3,第二头索引所指的是节点3,因此将第一头索引指向第一组的下一个节点,即节点4,第二头索引指向第二组的下一个节点,即节点4。然后,再次重新从步骤1033中的步骤(1)开始判断,由于此时第一头索引所指的是节点和第二头索引所指的是节点都是节点4,因此将第一头索引指向第一组的下一个节点,即节点5,第二头索引指向第二组的下一个节点,即节点5。然后,再次重新从步骤1033中的步骤(1)开始判断,由于此时第一头索引所指的是节点和第二头索引所指的是节点都是节点5,因此将第一头索引指向第一组的下一个节点,即节点6,第二头索引指向第二组的下一个节点,即节点6。此时在第一组中,第一头索引指向的是节点6,第一尾索引指向的也是节点6,因此第一组中的第一头索引与第一尾索引先相遇了,满足步骤(11)的条件。但是由于此时第一头索引指向的是节点6,第二头索引指向的也是节点6,因此也再次满足步骤(1)的条件,因此需要将第二头索引指向第二组的下一个节点,即节点7,第一头索引可以不移动(也可以指向第一组的下一个节点2,不影响结果)。此时,此时的第一头索引和第二头索引的位置,以及修改后的原始表单模型中的第i层如图3h所示。

此时执行步骤(11),即将第二组中从第二头索引到第二尾索引之间的所有节点,在原始表单模型中的第i层中删除。如图3h所示,第二头索引到第二尾索引之间的所有节点为节点7和节点8。其中由于节点7已经标记为已处理,因此需要删除的是节点8,然后在原始表单模型中的第i层中删除节点8,删除节点8后的原始表单模型中的第i层的节点依次为节点1、节点9、节点11、节点7、节点3-6、节点2以及节点10,由此可见,已修改为与第三虚拟表单模型的第i层一致。此时就完成了第三虚拟表单模型中的第i层与第一虚拟表单模型中的第i层的对比,也完成了原始表单模型中的第i层的修改,然后取i=i+1,并重复执行步骤1031至步骤1033,即可将该原始表单模型的每层节点修改为与该第三虚拟表单模型一致,由于每层的对比及修改方法均与第i层相同,因此不再赘述。

进一步的,上述的步骤(11)中所述的将第二组中从第二头索引到第二尾索引之间的所有节点,在原始表单模型中的第i层中删除,可以包括:

当所有节点中的第一节点存在子节点时,在删除第一节点时将第一节点和第一节点的所有子节点一起删除,该第一节点为所有节点中的任一节点。

即可以理解为,一旦某一层的某一节点发生了变化,并且该节点是下层某些节点的父节点时,无论其下层的子节点是否变化,都可以将以该节点为父节点的整颗子树删除,这样可以简化第三虚拟表单模型与第一虚拟表单模型的对比过程。

图4是根据本公开一示例性实施例示出的一种表单修改装置的框图,如图4所示,该装置400可以包括:

生成模块401,用于根据当前表单的原始表单模型,生成当前表单的第一虚拟表单模型,该第一虚拟表单模型与原始表单模型一致;

预修改模块402,用于当检测到对当前表单的第一操作时,将复制第一虚拟表单模型得到的第二虚拟表单模型放入当前的事件循环内,用于使事件循环内发生的针对当前表单的所有的修改操作均作用于第二虚拟表单模型上,事件循环是由第一操作触发产生,并在第一操作中断时结束;

表单修改模块403,用于根据事件循环结束后得到的第三虚拟表单模型与第一虚拟表单模型的对比结果,对原始表单模型进行修改,第三虚拟表单模型是第二虚拟表单模型经过事件循环内的所有的修改操作修改后得到的。

可选的,该表单修改模块403,用于:

根据第三虚拟表单模型中的每层的节点与第一虚拟表单模型中的同层的节点的对比结果,对原始表单模型中的同层节点进行修改操作,以将原始表单模型修改为与第三虚拟表单模型一致。

可选地,图5是根据本公开一示例性实施例示出的一种表单修改模块的框图,如图5所示,该表单修改模块403,可以包括:

分组子模块4031,用于在将第三虚拟表单模型中的第i层与第一虚拟表单模型中的第i层进行对比时,将第三虚拟表单模型中的第i层中的节点作为第一组,将第一虚拟表单模型中的第i层中的节点作为第二组,i为正整数,i的起始值为1;

索引配置子模块4032,用于将第一头索引设置在第一组中的首节点处,第一尾索引设置在第一组中的尾节点处,以及将第二头索引设置在第二组中的首节点处,第二尾索引设置在第二组中的尾节点处;

对比子模块4033,用于执行第一组和第二组的节点对比流程,以根据对比结果对原始表单模型的第i层中的节点进行修改。

循环子模块4034,用于取i=i+1,并重复执行上述在将第三虚拟表单模型中的第i层与第一虚拟表单模型中的第i层进行对比时,将第三虚拟表单模型中的第i层中的节点作为第一组,将第一虚拟表单模型中的第i层中的节点作为第二组,至执行第一组和第二组的节点对比流程,以根据对比结果对原始表单模型的第i层中的节点进行修改的步骤,直至将原始表单模型修改为与第三虚拟表单模型一致。

可选地,对比子模块4033可以用于:

当第一头索引所指的节点和第二头索引所指的节点相同时,将第一头索引指向第一组的下一个节点,第二头索引指向第二组的下一个节点,并重新执行节点对比流程;

当第一头索引所指的节点和第二头索引所指的节点不同时,判断第一尾索引所指的节点和第二尾索引所指的节点是否相同;

当第一尾索引所指的节点和第二尾索引所指的节点相同时,将第一尾索引指向第一组的上一个节点,第二尾索引指向第二组的上一个节点,并重新执行节点对比流程;

当第一尾索引所指的节点和第二尾索引所指的节点不同时,判断第一尾索引所指的节点和第二头索引所指的节点是否相同;

当第一尾索引所指的节点和第二头索引所指的节点相同时,在原始表单模型中的第i层中将第一尾索引所指的节点移动至第二尾索引所指的节点之后,并将第一尾索引指向第一组的上一个节点,第二头索引指向第二组的下一个节点,并重新执行节点对比流程;

当第一尾索引所指的节点和第二头索引所指的节点不同时,判断第一头索引所指的节点和第二尾索引所指的节点是否相同;

当第一头索引所指的节点和第二尾索引所指的节相同时,在原始表单模型中的第i层中将第一头索引所指的节点移动至第二头索引所指的节点之前,并将第一头索引指向第一组的下一个节点,第二尾索引指向第二组的上一个节点,并重新执行节点对比流程;

当第一头索引所指的节点和第二尾索引所指的节不同时,遍历第二头索引到第二尾索引之间的所有节点,以确定是否存在第一头索引所指的节点;

当不存在第一头索引所指的节点时,在原始表单模型中的第i层中将第一头索引所指的节点移动至第二头索引所指的节点之前,并将第一头索引指向第一组的下一个节点,并重新执行节点对比流程;

当存在第一头索引所指的节点时,在原始表单模型中的第i层中将第一头索引所指的节点移动至第二头索引所指的节点之前,将第一头索引所指的节点在第二组中标记为已处理,并将第一头索引指向第一组的下一个节点,并重新执行节点对比流程;

当第一头索引与第一尾索引先相遇时,将第二组中从第二头索引到第二尾索引之间的所有节点,在原始表单模型中的第i层中删除;

当第二头索引与第二尾索引先相遇时,将第二组中从第二头索引到第二尾索引之间的所有节点,在原始表单模型中的第i层中插入至第二尾索引所指的节点之前。

可选地,该对比子模块4033在执行上述的将第二组中从第二头索引到第二尾索引之间的所有节点,在原始表单模型中的第i层中删除时,可以用于:

当所有节点中的第一节点存在子节点时,在删除第一节点时将第一节点和第一节点的所有子节点一起删除,第一节点为该所有节点中的任一节点。

在上述技术方案中,根据当前表单的原始表单模型,生成当前表单的第一虚拟表单模型,该第一虚拟表单模型与原始表单模型一致;当检测到对当前表单的第一操作时,将复制第一虚拟表单模型得到的第二虚拟表单模型放入当前的事件循环内,用于使事件循环内发生的针述当前表单的所有的修改操作均作用于第二虚拟表单模型上,该事件循环是由第一操作触发产生,并在该第一操作中断时结束;根据事件循环结束后得到的第三虚拟表单模型与第一虚拟表单模型的对比结果,对该原始表单模型进行修改,该第三虚拟表单模型是该第二虚拟表单模型经过该事件循环内的所有的修改操作修改后得到的。通过上述技术方案,能够在一个事件循环内对虚拟表单模型进行多次修改,从而不必每次修改表单模型都触发表单的重新绘制,而是在事件循环后再根据事件循环内对虚拟表单模型的多次修改在原始表单模型上进行修改,从而可以针对事件循环内的多次修改操作进行一次表单重绘,因此能够避免不必要的资源消耗,降低性能损耗。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图6是根据一示例性实施例示出的一种电子设备的框图。如图6所示,该电子设备600可以包括:处理器601,存储器602。该电子设备600还可以包括多媒体组件603,输入/输出(i/o)接口604,以及通信组件606中的一者或多者。

其中,处理器601用于控制该电子设备600的整体操作,以完成上述的表单修改方法中的全部或部分步骤。存储器602用于存储各种类型的数据以支持在该电子设备600的操作,这些数据例如可以包括用于在该电子设备600上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器602可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件603可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器602或通过通信组件605发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口604为处理器601和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件605用于该电子设备600与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(nearfieldcommunication,简称nfc),2g、3g或4g,或它们中的一种或几种的组合,因此相应的该通信组件605可以包括:wi-fi模块,蓝牙模块,nfc模块。

在一示例性实施例中,电子设备600可以被一个或多个应用专用集成电路(applicationspecificintegratedcircuit,简称asic)、数字信号处理器(digitalsignalprocessor,简称dsp)、数字信号处理设备(digitalsignalprocessingdevice,简称dspd)、可编程逻辑器件(programmablelogicdevice,简称pld)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的表单修改方法。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的表单修改方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器602,上述程序指令可由电子设备600的处理器601执行以完成上述的表单修改方法。

图7是根据一示例性实施例示出的另一种电子设备的框图。例如,电子设备700可以被提供为一服务器。参照图7,电子设备700包括处理器710,其数量可以为一个或多个,以及存储器720,用于存储可由处理器710执行的计算机程序。存储器720中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器710可以被配置为执行该计算机程序,以执行上述的表单修改方法。

另外,电子设备700还可以包括电源组件730和通信组件740,该电源组件730可以被配置为执行电子设备700的电源管理,该通信组件740可以被配置为实现电子设备700的通信,例如,有线或无线通信。此外,该电子设备700还可以包括输入/输出(i/o)接口750。电子设备700可以操作基于存储在存储器720的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm等等。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的表单修改方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器720,上述程序指令可由电子设备700的处理器710执行以完成上述的表单修改方法。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1