CN105389315A - 一种动态网页更新方法及装置 - Google Patents
一种动态网页更新方法及装置 Download PDFInfo
- Publication number
- CN105389315A CN105389315A CN201410450258.1A CN201410450258A CN105389315A CN 105389315 A CN105389315 A CN 105389315A CN 201410450258 A CN201410450258 A CN 201410450258A CN 105389315 A CN105389315 A CN 105389315A
- Authority
- CN
- China
- Prior art keywords
- data
- web page
- dynamic
- calculating
- data item
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 91
- 230000008859 change Effects 0.000 claims abstract description 100
- 230000001960 triggered effect Effects 0.000 claims description 29
- 241001269238 Data Species 0.000 claims description 21
- 230000008569 process Effects 0.000 claims description 20
- 238000004806 packaging method and process Methods 0.000 claims description 6
- 230000008929 regeneration Effects 0.000 claims description 5
- 238000011069 regeneration method Methods 0.000 claims description 5
- 108010001267 Protein Subunits Proteins 0.000 claims description 3
- 230000000694 effects Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000012141 concentrate Substances 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 238000013523 data management Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- ORQBXQOJMQIAOY-UHFFFAOYSA-N nobelium Chemical compound [No] ORQBXQOJMQIAOY-UHFFFAOYSA-N 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种动态网页更新方法和装置,所述方法包括:数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点;所述根节点作为顶级对象向所述动态网页转发来自其子节点的所述数据变化通知;根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素。采用本申请提供的方法,每个发生变化的数据项都会抛出事件,使得顶级对象能够获取变化的数据项,从而能够针对动态网页进行细颗粒度的控制,无需为每个数据项分别编写控制代码,有效减少开发人员工作量;通过在动态网页中使用自定义属性,使得当动态网页监听到数据变化时,只需解析特定的白名单语言,从而达到提高安全性的效果。
Description
技术领域
本申请涉及网络数据管理领域,具体涉及一种动态网页更新方法和装置。
背景技术
在数据驱动的应用系统中,当数据产生变化时,视图与数据之间能够实现联动,即视图实时反映数据的变化。视图与数据之间实现联动有两种方式,一种为根据数据的变化,对视图进行粗颗粒度的控制,即当某个数据变化时,需要更新整个视图;另一种为根据数据的变化,对视图进行细颗粒度的控制,即当某个数据变化时,只需更新视图中与该数据相关的部分,而无需更新整个视图。可见,根据数据的变化,对视图进行细颗粒度的控制,能够节约系统资源、节省网络流量,并且提高了用户体验。
一种非常常见的根据数据对视图进行控制的场合,是根据数据的变化对动态网页中与该数据关联的网页元素进行更新,视图即动态网页。
常用的根据数据的变化对动态网页进行细颗粒度的控制,包括两方面处理:一方面,对于动态网页的内容更新,需要为动态网页中每一个数据编写一段控制代码,使得当某个数据变化时,只需更新动态网页中与该数据相关的部分;另一方面,对于动态网页的渲染,仍然需要编写与渲染逻辑相关的代码。可见,采用这种方式,既要编写大量的控制代码更新动态网页的内容,还要编写大量的渲染逻辑代码对动态网页进行渲染,因而存在编码效率低的问题。
为了解决编写这些控制代码所带来的效率低的问题,现在一般通过特殊的语法让动态网页与数据之间实现联动,特殊的语法是指在HTML文件中嵌套JavaScript语句,并且标明网页元素中自定义属性与对应数据之间的关联关系。采用这种特殊的语法,能够通过newFunction的方式生成更新的字符串,从而达到操作数据即更新动态网页的目的,实现针对视图的细颗粒度的控制。通过newFunction的方式生成更新的字符串的过程为:采用newFunction的方式,通过JavaScript原生语言对其进行编译,得到一个JavaScript函数,该函数对于发生变化的数据,生成一个字符串,字符串包括发生变化的数据值和嵌套的HTML代码片段。采用这种方式,使得无需控制代码即可对动态网页进行渲染。因此,相对于采用标准语法的方式而言,采用特殊语法的方式对于动态网页的渲染更加方便。但是,由于newFunction方式实现的功能是有限的,因而仍然需要为每一个数据编写一段控制代码,才能实现细颗粒度控制动态网页的内容更新。而且,采用这种方式时,由于在动态网页中能够运行JavaScript原生语言,因此恶意Web用户能够将代码植入到提供给其它用户使用的页面中,引起跨站脚本攻击,由此带来不安全的问题。
因此,现有技术中存在编码效率低且不安全的问题。
申请内容
本申请提供一种更新视图的方法和装置,以解决现有技术存在编码效率低且不安全的问题。
本申请提供一种更新视图的方法,包括:
数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点,其中,所述节点祖先中的各个节点向其父节点发送的所述数据变化通知至少包括:该节点的名和所述数据项在该节点的子节点处的路径名;所述根节点作为顶级对象;
所述顶级对象向所述动态网页转发来自其子节点的所述数据变化通知;
根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素;
其中,所述数据集的结构是树,所述数据项是所述数据集的叶节点。
可选的,在所述数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点之前,还包括:
将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性;
将所述动态网页注册为所述顶级对象的观察者。
可选的,所述将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性,是指为所述数据集中各个非叶节点分配数据变化事件,当所述数据项发生变化时,所述数据项的父节点的数据变化事件被触发,并逐层向上触发所述数据项的所述节点祖先,直至所述根节点的数据变化事件被触发;当节点触发其父节点的数据变化事件时,向其父节点发送所述数据变化通知;当所述顶级对象的数据变化事件被触发后,所述顶级对象向其观察者发送所述数据变化通知。
可选的,在所述数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点之前,还包括:
获取所述动态网页中所有动态数据与所述网页元素之间的对应关系,以及所述动态数据在所述网页元素中的使用方式;
其中,所述动态数据是指数据项和计算数据,所述计算数据是指至少两个所述数据项的计算值,若所述数据项的类型为数字,则计算值是指数值运算的值;若所述数据项的类型为字符串,则计算值是指字符串操作的值。
可选的,所述获取所述动态网页中所有动态数据与所述网页元素之间的对应关系,以及所述动态数据在所述网页元素中的使用方式,包括如下步骤:
获取所述动态网页中所有所述网页元素;
遍历各个所述网页元素,提取包括自定义属性的网页元素,对于遍历过程中经过的每一个包括自定义属性的网页元素,解析该网页元素,获取与该网页元素关联的所述动态数据,以及所述动态数据在所述网页元素中的使用方式;该网页元素和与其关联的所述动态数据之间形成所述动态数据与网页元素之间的对应关系。
可选的,所述动态数据在所述网页元素中的使用方式采取如下方式之一:所述动态数据作为所述网页元素的属性;所述动态数据作为所述网页元素的内容。
可选的,还包括:
所述顶级对象向所有计算数据转发来自其子节点的所述数据变化通知;
根据所述数据变化通知,更新与所述发生变化的数据项有依赖关系的所有计算数据,作为更新的计算数据;
各个所述更新的计算数据分别向所述顶级对象发送计算数据的名;
所述顶级对象向所述动态网页发送计算数据变化通知,所述计算数据变化通知包括所述更新的计算数据的名;
根据所述计算数据变化通知,更新所述动态网页中与所述更新的计算数据关联的网页元素。
可选的,在所述顶级对象向所有计算数据转发来自其子节点的所述数据变化通知之前,还包括:
获取所有与所述动态网页相关的计算数据;
将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点;
将各个所述计算数据注册为所述顶级对象的观察者。
可选的,所述将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点是指,为所述计算数据分配数据变化事件,当所述计算数据发生变化时,该数据变化事件被触发,所述计算数据向所述顶级对象发送所述计算数据的名,并触发所述顶级对象的数据变化事件。
可选的,所述根据所述数据变化通知,更新与所述发生变化的数据项有依赖关系的所有所述计算数据包括:
根据所述数据变化通知,获取所述发生变化的数据项的路径名;
获取各个所述计算数据与所述数据项之间的依赖关系;
根据所述依赖关系,获取与所述发生变化的数据项有依赖关系的所有所述计算数据,作为待更新的计算数据;
根据所述发生变化的数据项,更新所述待更新的计算数据。
可选的,所述计算数据与所述数据项之间的依赖关系采用如下步骤生成:
读取所述计算数据的计算公式,获取所述计算公式中所有数据项;
遍历各个数据项,获取所述数据项的路径名;
存储已获取的所述计算数据的名和所有所述数据项的路径名,作为所述计算数据与所述数据项之间的依赖关系。
可选的,所述根据所述计算数据变化通知,更新所述动态网页中与所述更新的计算数据关联的网页元素包括:
根据所述计算数据变化通知,获取所述更新的计算数据的名;
根据所述计算数据的名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述更新的计算数据对应的所述网页元素和所述更新的计算数据在所述网页元素中的使用方式;
根据所述更新的计算数据和所述更新的计算数据在所述网页元素中的使用方式,更新所述网页元素。
可选的,所述根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素包括:
根据所述数据变化通知,获取所述发生变化的数据项的路径名;
根据所述数据项的路径名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述发生变化的数据项对应的所述网页元素和所述发生变化的数据项在所述网页元素中的使用方式;
根据所述发生变化的数据项和所述发生变化的数据项在所述网页元素中的使用方式,更新所述网页元素。
本申请还提供一种更新视图的装置,包括:
数据逐层发送单元,用于数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点,其中,所述节点祖先中的各个节点向其父节点发送的所述数据变化通知至少包括:该节点的名和所述数据项在该节点的子节点处的路径名;所述根节点作为顶级对象;
第一发送单元,用于所述顶级对象向所述动态网页转发来自其子节点的所述数据变化通知;
第一更新单元,用于根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素;
其中,所述数据集的结构是树,所述数据项是所述数据集的叶节点。
可选的,还包括:
第一包装单元,用于将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性;
第一注册单元,用于将所述动态网页注册为所述顶级对象的观察者。
可选的,所述将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性,是指为所述数据集中各个非叶节点分配数据变化事件,当所述数据项发生变化时,所述数据项的父节点的数据变化事件被触发,并逐层向上触发所述数据项的所述节点祖先,直至所述根节点的数据变化事件被触发;当节点触发其父节点的数据变化事件时,向其父节点发送所述数据变化通知;当所述顶级对象的数据变化事件被触发后,所述顶级对象向其观察者发送所述数据变化通知。
可选的,还包括:
获取对应关系单元,用于获取所述动态网页中所有动态数据与所述网页元素之间的对应关系,以及所述动态数据在所述网页元素中的使用方式;
其中,所述动态数据是指数据项和计算数据,所述计算数据是指至少两个所述数据项的计算值,若所述数据项的类型为数字,则计算值是指数值运算的值;若所述数据项的类型为字符串,则计算值是指字符串操作的值。
可选的,所述获取对应关系单元包括:
获取所有元素子单元,用于获取所述动态网页中所有所述网页元素;
提取解析元素子单元,用于遍历各个所述网页元素,提取包括自定义属性的网页元素,对于遍历过程中经过的每一个包括自定义属性的网页元素,解析该网页元素,获取与该网页元素关联的所述动态数据,以及所述动态数据在所述网页元素中的使用方式;该网页元素和与其关联的所述动态数据之间形成所述动态数据与网页元素之间的对应关系。
可选的,所述动态数据在所述网页元素中的使用方式采取如下方式之一:所述动态数据作为所述网页元素的属性;所述动态数据作为所述网页元素的内容。
可选的,还包括:
第二发送单元,用于所述顶级对象向所有计算数据转发来自其子节点的所述数据变化通知;
更新计算数据单元,用于根据所述数据变化通知,更新与所述发生变化的数据项有依赖关系的所有计算数据,作为更新的计算数据;
第三发送单元,用于各个所述更新的计算数据分别向所述顶级对象发送计算数据的名;
第四发送单元,用于所述顶级对象向所述动态网页发送计算数据变化通知,所述计算数据变化通知包括所述更新的计算数据的名;
第二更新单元,用于根据所述计算数据变化通知,更新所述动态网页中与所述更新的计算数据关联的网页元素。
可选的,还包括:
获取计算数据单元,用于获取所有与所述动态网页相关的计算数据;
第二包装单元,用于将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点;
第二注册单元,用于将各个所述计算数据注册为所述顶级对象的观察者。
可选的,所述将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点是指,为所述计算数据分配数据变化事件,当所述计算数据发生变化时,该数据变化事件被触发,所述计算数据向所述顶级对象发送所述计算数据的名,并触发所述顶级对象的数据变化事件。
可选的,所述更新计算数据单元包括:
获取路径名子单元,用于根据所述数据变化通知,获取所述发生变化的数据项的路径名;
获取依赖关系子单元,用于获取各个所述计算数据与所述数据项之间的依赖关系;
获取待更新计算数据子单元,用于根据所述依赖关系,获取与所述发生变化的数据项有依赖关系的所有所述计算数据,作为待更新的计算数据;
更新计算数据子单元,用于根据所述发生变化的数据项,更新所述待更新的计算数据。
可选的,所述装置还包括:
依赖关系生成单元,用于获取并存储所述计算数据与所述数据项之间的依赖关系;
所述依赖关系生成单元包括:
读取获取子单元,用于读取所述计算数据的计算公式,获取所述计算公式中所有数据项;
遍历获取子单元,用于遍历各个数据项,获取所述数据项的路径名;
存储子单元,用于存储已获取的所述计算数据的名和所有所述数据项的路径名,作为所述计算数据与所述数据项之间的依赖关系。
可选的,所述第二更新动态网页单元包括:
第一获取子单元,用于根据所述计算数据变化通知,获取所述更新的计算数据的名;
第一查找子单元,用于根据所述计算数据的名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述更新的计算数据对应的所述网页元素和所述更新的计算数据在所述网页元素中的使用方式;
第一更新子单元,用于根据所述更新的计算数据和所述更新的计算数据在所述网页元素中的使用方式,更新所述网页元素。
可选的,所述第一更新单元包括:
第二获取子单元,用于根据所述数据变化通知,获取所述发生变化的数据项的路径名;
第二查找子单元,用于根据所述数据项的路径名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述发生变化的数据项对应的所述网页元素和所述发生变化的数据项在所述网页元素中的使用方式;
第二更新子单元,用于根据所述发生变化的数据项和所述发生变化的数据项在所述网页元素中的使用方式,更新所述网页元素。
与现有技术相比,本申请具有以下优点:
本申请提供的动态网页更新方法,数据集中发生变化的数据项通过该数据项的节点祖先逐层向上发送数据变化通知,直至顶级对象获取该数据项;顶级对象代表数据集中各个数据项,统一向动态网页发送包括该数据项路径名的数据变化通知,动态网页根据通知自动更新与该数据项关联的网页元素,从而能够针对动态网页进行细颗粒度的控制,无需为每个数据项分别编写控制代码,有效减少开发人员工作量;通过在动态网页中使用自定义属性,使得当动态网页监听到数据变化时,只需解析特定的白名单语言,即自定义属性,避免在动态网页中运行JavaScript原生语言,从而不会引起跨站脚本攻击,达到提高安全性的效果。
附图说明
图1是本申请的动态网页更新方法实施例A的流程图;
图2是本申请的动态网页更新方法实施例A的具体流程图;
图3是本申请的动态网页更新方法实施例A的可监听对象结构图;
图4是本申请的动态网页更新方法实施例A中步骤S203的具体流程图;
图5是本申请的动态网页更新方法实施例A中步骤S104的具体流程图;
图6是本申请的动态网页更新方法另一个实施例B的流程图;
图7是本申请的动态网页更新方法另一个实施例B的可监听对象结构图;
图8是本申请的动态网页更新方法另一个实施例B的具体流程图;
图9是本申请的动态网页更新方法另一个实施例B中步骤S602的具体流程图;
图10是本申请的动态网页更新方法另一个实施例B中生成计算数据与数据项之间的依赖关系的具体流程图;
图11是本申请的动态网页更新方法另一个实施例B中计算数据fj的依赖关系图;
图12是本申请的动态网页更新方法另一个实施例B中步骤S605的具体流程图;
图13是本申请的动态网页更新装置实施例A的示意图;
图14是本申请的动态网页更新装置的另一个实施例B的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,提供了一种动态网页更新方法和装置。在下面的实施例中逐一进行详细说明。
本申请提供的动态网页更新方法,通过采用观察者模式实现事件处理系统。观察者模式又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式,是软件设计模式的一种。在观察者模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知,通常透过呼叫各观察者所提供的方法来管理各个观察者,各个观察者根据通知主动更新自己。本申请提供的动态网页更新方法,当动态网页监听到顶级对象统一发送的数据变化通知时,能够自动更新与发生变化的数据项关联的网页元素。
请参考图1,其为本申请的动态网页更新方法实施例A的流程图。所述方法包括如下步骤:
步骤S101:数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点,其中,所述节点祖先中的各个节点向其父节点发送的所述数据变化通知至少包括:该节点的名和所述数据项在该节点的子节点处的路径名;所述根节点作为顶级对象。
本申请所述的动态网页,是指与静态网页相对的一种网页编程技术。静态网页随着HTML代码的生成,页面的内容和显示效果就基本上不会发生变化了,除非修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却可以随时间、环境或者数据库操作的结果而发生改变。动态网页与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。
本申请所述的数据集,是指由数据组成的集合,数据集的结构是树。树是一种递归的数据结构,树中包括树,树中的各个节点之间有明显的层次关系。树包括根节点、内部节点和叶节点,树中有且仅有一个根节点。节点祖先,是指从根到该节点所经分支上的所有节点。
本申请所述的数据项是指具体的数据,其为数据集的叶节点。例如:数据集a={c:[{f:’123’,g:’456'},{f:’789’,g:’012'}]},则该数据集的根节点是a,a包括数组c的元素c[0]和c[1],其中c[0]元素包括数据项f:’123’和数据项g:’456',c[1]元素包括数据项f:’789’和数据项g:’012',可见,数据集的各个节点之间有明显的层次关系。在实际应用中,根节点的子节点可以采用数组元素方式进行表示,也可以采用其他方式进行表示。例如:数据集a={c:{f:’123’,g:’456'}},则该数据集的根节点是a,内部节点为c,c包括数据项f:’123’和数据项g:’456'。
本申请所述的数据项的路径名,是指数据项在数据集的根节点处的路径名。数据集能够包括相同名的数据项,但不包括相同路径名的数据项,即数据项的路径名在数据集中是唯一的。例如:数据集a={c:[{f:’123’,g:’456'},{f:’789’,g:’012'}]},则数据项f:’123’的路径名为c[0].f,数据项f:’789’的路径名为c[1].f。
本申请所述的顶级对象是一个可监听的对象,代表数据集中的各个数据项统一向观察者发送数据变化通知。
本申请提供的动态网页更新方法,发生变化的数据项通过其所属的数据集的各个节点祖先,逐层向上发送数据变化通知,直至数据集的根节点获取该数据项的路径名。发生变化的数据项的节点祖先中的各个节点向其父节点发送的数据变化通知包括:该节点的名和发生变化的数据项在该节点的子节点处的路径名。例如:数据集a={c:[{f:’123’,g:’456'},{f:’789’,g:’012'}]}中f:’123’发生变化后为f:’456’,f:’123’的节点祖先包括:内部节点c[0]和根节点a,根节点a获取发生变化的数据项的路径名为c[0].f。
步骤S102:所述顶级对象向所述动态网页转发来自其子节点的所述数据变化通知。
本申请提供的动态网页更新方法,当顶级对象监听到数据项发生变化后,通过呼叫动态网页所提供的方法,将这个改变向外转发给动态网页,从而使得动态网页能够获知发生改变的数据项。
步骤S103:根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素。
本申请提供的动态网页更新方法,当动态网页获取发生变化的数据项后,将自动更新与该数据项关联的各个网页元素。例如:在HTML文件中,数据项与网页元素的关联方式为:<divbd-html='c[1].f’>789</div>,其中bd-html是自定义属性,c[1].f为数据项f的路径名,当数据项f发生变化时,与其关联的网页元素div的内容将发生改变。
请参考图2,其为本申请的动态网页更新方法实施例A的具体流程图。在步骤S101之前,还包括:
步骤S201:将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性。
在本实施例中,将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性,是指为所述数据集中各个非叶节点分配数据变化事件,当所述数据项发生变化时,所述数据项的父节点的数据变化事件被触发,并逐层向上触发所述数据项的所述节点祖先,直至所述根节点的数据变化事件被触发;当节点触发其父节点的数据变化事件时,向其父节点发送所述数据变化通知;当所述顶级对象的数据变化事件被触发后,所述顶级对象向其观察者发送所述数据变化通知。
在本实施例中,数据项的节点祖先均为可监听的对象,数据项通过其父节点逐层向上反馈数据变化事件,直至顶级对象获知数据项的变化。在一个节点祖先向其上级对象反馈时,合并该节点祖先的名和数据项在该节点祖先的子节点处的路径名,作为更新的数据项路径名,并将更新的数据项路径名传递给该节点祖先的上级对象。例如:采用以下方法统一为数据项的各个节点祖先分别分配数据变化事件,并为数据变化事件指定事件处理逻辑:
其中,object是一个节点祖先,定义为可监听的对象,为其分配的数据变化事件为change事件。当该对象发生变化时,其change事件被触发,该事件对应的事件处理函数首先将为该对象生成更新的数据项路径名,然后触发其父节点的change事件,使得发生变化的数据项的路径名逐层更新,直至顶级对象获取数据项的路径名。例如:数据集a={c:[{f:’123’,g:’456'},{f:’789’,g:’012'}]}中f:’123’发生变化后为f:’456’,根节点a获取发生变化的数据项的路径名为c[0].f。
在本实施例中,当一个可监听的对象的数据变化事件被触发时,首先判断该对象是否为顶级对象,若是,则顶级对象向其观察者发送数据变化通知,数据变化通知中包括发生变化的数据项的路径名;否则,该对象触发其上一级对象的数据变化事件。
请参考图3,其为本申请的动态网页更新方法实施例A的可监听对象结构图。在本实施例中,数据集的结构表示为:vara={b,c:{f:‘xxx',g:'xxx'},d,e:{h:‘xxx',j:'xxx'}},其中a为顶级对象,b、d、f、g、h和j为数据项,c为数据项f和g的节点祖先,e为数据项h和j的节点祖先。当数据项b、数据项d、数据项f、数据项g、数据项h和数据项j中的任意一个发生变化时,将触发该数据项父节点的数据变化事件,该父节点生成更新的数据项路径名,然后触发该父节点的父节点的change事件,使得发生变化的数据项的路径名逐层更新,直至顶级对象获取数据项的路径名。例如:当数据项g发生改变的时候,顶级对象a是可以监听到的,并且准确的知道该数据项的路径名为c.g。
步骤S202:将所述动态网页注册为所述顶级对象的观察者。
本申请提供的动态网页更新方法,采用观察者模式实现事件处理系统。观察者模式有很多实现方式,从根本上说,该模式必须包含两个角色:观察者和被观察对象。在数据驱动的应用系统中,业务数据是被观察对象,用户界面是观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。观察者和被观察者之间存在“观察”的逻辑关联,当被观察者发生改变的时候,观察者就会观察到这样的变化,并且做出相应的响应。如果在动态网页、数据之间使用这样的观察过程,可以确保动态网页和数据之间划清界限,假定应用程序的需求发生变化,需要修改动态网页的表现,只需要重新构建一个动态网页,数据不需要发生变化。
在本实施例中,数据项是业务数据,顶级对象代表各个数据项统一向观察者发送数据项变化的通知,因此顶级对象是被观察者;动态网页既是用户界面,又是观察者。
本申请提供的动态网页更新方法,实现观察者模式的时候要注意,观察者和被观察对象之间的互动关系不能体现成类之间的直接调用,否则就将使观察者和被观察对象之间紧密的耦合起来,从根本上违反面向对象的设计的原则。无论是观察者“观察”观察对象,还是被观察者将自己的改变“通知”观察者,都不应该直接调用。观察者将自己注册到被观察者的容器中时,被观察者不应该过问观察者的具体类型,而是应该使用观察者的接口。这样的优点是:假定程序中还有别的观察者,那么只要这个观察者也是相同的接口实现即可。一个被观察者可以对应多个观察者,当被观察者发生变化的时候,它可以将消息一一通知给所有的观察者。基于接口、而不是具体的实现,为程序提供了更大的灵活性。
本申请提供的动态网页更新方法,实现观察者模式有很多形式。在本实施例中,采用“注册、通知、撤销注册”的形式。观察者将自己注册到被观察对象中,被观察对象将观察者存放在一个容器里。当被观察对象发生了某种变化,从容器中得到所有注册过的观察者,遍历观察者,逐个将变化通知观察者。在通知观察者时,通过调用观察者的更新接口通知所有观察者更新自己。例如,更新接口为publicvoidupdate(Object...objs),在该接口中可以实现一些操作,比如更新数据,更新用户界面等。
在本实施例中,在步骤S101之前,还包括:
步骤S203:获取所述动态网页中所有动态数据与所述网页元素之间的对应关系,以及所述动态数据在所述网页元素中的使用方式。
本申请所述的动态数据,是指数据项和计算数据。其中,计算数据是指至少两个数据项的计算值,若数据项是数字,则计算值是指数值运算的值;若数据项包括字符串,则计算值是指字符串操作的值。
本申请所述的网页元素是指具有自定义属性的网页元素,例如:网页元素<divbd-html='c[1].f’>789</div>,其具有自定义属性bd-html与该元素关联的数据项是c[1].f。因此,数据项c[1].f和网页元素div之间存在对应关系,数据项c[1].f在网页元素div中的使用方式为:数据项c[1].f是网页元素div的内容。
本申请所述的动态数据在所述网页元素中的使用方式采取如下方式之一:所述动态数据作为所述网页元素的属性;所述动态数据作为所述网页元素的内容。
在本实施例中,动态数据可以作为网页元素的属性,例如:在HTML文件中,网页元素<ulbd-each="list"bd-attrs="id:id"href="#purchase/{{id}}"></ul>,则自定义属性bd-attrs的值为"id:id",其中第一个id是指ul元素的id属性,第二个id是ul元素关联的动态数据。
在本实施例中,动态数据可以作为网页元素的内容。例如:网页元素<divbd-html='c[1].f’>789</div>,则自定义属性bd-html与div元素关联的动态数据是c[1].f,该数据作为div元素的内容。
本申请提供的动态网页更新方法,还可以使用动态数据遍历网页元素的所有子元素,例如:在HTML文件中,网页元素<ulbd-each="list"bd-attrs="id:id"href="#purchase/{{id}}"></ul>,则自定义属性bd-each的值为"list",其中list是ul元素关联的动态数据,该动态数据是一个数据集,使用该数据集遍历ul元素的所有ul子元素。
请参考图4,其为本申请的动态网页更新方法实施例A中步骤S203的具体流程图。在本实施例中,步骤S203包括:
步骤S401:获取所述动态网页中所有所述网页元素。
步骤S402:遍历各个所述网页元素,提取包括自定义属性的网页元素,对于遍历过程中经过的每一个包括自定义属性的网页元素,解析该网页元素,获取与该网页元素关联的所述动态数据,以及所述动态数据在所述网页元素中的使用方式;该网页元素和与其关联的所述动态数据之间形成所述动态数据与网页元素之间的对应关系。
在本实施例中,通过解析包括自定义属性的元素,获取该元素对应的动态数据的路径名,以及动态数据在该元素中的使用方式。例如,在HTML文件中,网页元素<ulbd-each="list"bd-attrs="id:id"href="#purchase/{{id}}"></ul>,解析该元素后,得到bindAttrs对象,在bindAttrs对象中保存了该ul元素与需要访问对象之间的对应关系。bindAttrs对象的内容如下:
请参考图5,其为本申请的动态网页更新方法实施例A中步骤S103的具体流程图。在本实施例中,步骤S103包括:
步骤S501:根据所述数据变化通知,获取所述发生变化的数据项的路径名。
步骤S502:根据所述数据项的路径名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述发生变化的数据项对应的所述网页元素和所述发生变化的数据项在所述网页元素中的使用方式。
步骤S503:根据所述发生变化的数据项和所述发生变化的数据项在所述网页元素中的使用方式,更新所述网页元素。
在本实施例中,通过步骤S203获取动态网页中所有动态数据与网页元素之间的对应关系和动态数据在网页元素中的使用方式后,动态网页根据发生变化的数据项的路径名,首先在动态数据与网页元素之间的对应关系中查找该数据项对应的网页元素和该数据项在该网页元素中的使用方式,然后更新与该数据项有对应关系的网页元素,对于与该数据项无关的网页元素则不进行更新。
本申请提供的动态网页更新方法,数据集中发生变化的数据项通过该数据项的节点祖先逐层向上发送数据变化通知,直至顶级对象获取该数据项;顶级对象代表数据集中各个数据项,统一向动态网页发送包括该数据项路径名的数据变化通知,动态网页根据通知自动更新与该数据项关联的网页元素,从而能够针对动态网页进行细颗粒度的控制,无需为每个数据项分别编写控制代码,有效减少开发人员工作量;通过在动态网页中使用自定义属性,使得当动态网页监听到数据变化时,只需解析特定的白名单语言,即自定义属性,避免在动态网页中运行JavaScript原生语言,从而不会引起跨站脚本攻击,达到提高安全性的效果。
请参考图6,其为本申请的动态网页更新方法另一个实施例B的流程图,是所述方法的优选实施例。在本实施例中,除了图1所示的步骤之外,该方法还包括:
步骤S601:所述顶级对象向所有计算数据转发来自其子节点的所述数据变化通知。
在本实施例中,动态网页还包括对应计算数据的网页元素,当顶级对象监听到数据项发生变化后,通过呼叫计算数据所提供的方法,将这个改变向外转发给计算数据,从而使得计算数据能够获知发生改变的数据项。
步骤S602:根据所述数据变化通知,更新与所述发生变化的数据项有依赖关系的所有计算数据,作为更新的计算数据。
请参考图7,其为本申请的动态网页更新方法所述另一个实施例B的可监听对象结构图。其中fj为计算数据,计算数据fj依赖数据项f和数据项j。计算数据fj是顶级对象a的又一观察者,当数据项f或数据项j发生改变的时候,顶级对象a获取发生改变的数据项的路径名,并发送数据变化通知到计算数据fj上,计算数据fj也做出相应的改变。
在本实施例中,当计算数据获取发生变化的数据项后,将自动更新与该数据项关联的各个该计算数据。例如:数据集a={c:[{f:’123’,g:’456'},{f:’789’,g:’012'}]},计算数据dummyKey依赖数据项c[0].f和c[1].f,相关代码为:vardummyKey=function(){returnthis.get('c[0].f’)+this.get(‘c[1].f’);},当数据项c[0].f或c[1].f发生变化后,将自动更新依赖其的计算数据dummyKey。
步骤S603:各个所述更新的计算数据分别向所述顶级对象发送计算数据的名。
在本实施例中,各个发生变化的计算数据向顶级对象发送数据变化通知,使得顶级对象获取发生变化的计算数据的名。
步骤S604:所述顶级对象向所述动态网页发送计算数据变化通知,所述计算数据变化通知包括所述更新的计算数据的名。
步骤S605:根据所述计算数据变化通知,更新所述动态网页中与所述更新的计算数据关联的网页元素。
在本实施例中,当计算数据发生变化后,将自动更新与该计算数据关联的各个网页元素。例如:数据集a={c:[{f:’123’,g:’456'},{f:’789’,g:’012'}]};计算数据dummyKey依赖数据项c[0].f和c[1].f,相关代码为:vardummyKey=function(){returnthis.get('c[0].f’)+this.get(‘c[1].f’);};在HTML文件中,数据项、计算数据与网页元素的关联方式为:
<divbd-html='c[1].f’>789</div>
<divbd-html='dummyKey’>123789</div>
其中bd-html是自定义属性,c[1].f为数据集a中第二个f的路径名。当数据集a中第二个f发生改变的时候变为123,顶级对象a是可以监听到,并且准确的知道其路径名是c[1].f。根据该数据项,一方面,与数据项c[1].f关联的网页元素将发生改变,另一方面,与计算数据dummyKey关联的网页元素将发生改变,那么HTML会变成下面的形式:
<divbd-html='c[1].f’>123</div>
<divbd-html='dummyKey’>123123</div>。
请参考图8,其为本申请的动态网页更新方法所述另一个实施例B的具体流程图。在本实施例中,在步骤S601之前,还包括:
步骤S801:获取所有与所述动态网页相关的计算数据。
步骤S802:将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点。
在本实施例中,将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点是指,为所述计算数据分配数据变化事件,当所述计算数据发生变化时,该数据变化事件被触发,所述计算数据向所述顶级对象发送所述计算数据的名,并触发所述顶级对象的数据变化事件。
步骤S803:将各个所述计算数据注册为所述顶级对象的观察者。
请参考图9,其为本申请的动态网页更新方法所述另一个实施例B中步骤S602的具体流程图。在本实施例中,步骤S602包括:
步骤S901:根据所述数据变化通知,获取所述发生变化的数据项的路径名。
步骤S902:获取各个所述计算数据与所述数据项之间的依赖关系。
在本实施例中,计算数据是至少两个数据项的计算值,因此计算数据与数据项之间存在依赖关系。当数据项发生变化时,与其存在依赖关系的计算数据也会同步发生变化。根据计算数据的定义,收集其对于数据项的依赖关系。由于计算数据是在动态网页中进行定义的,因此当加载动态网页时获取该依赖关系。
请参考图10,其为本申请的动态网页更新方法所述另一个实施例B中生成计算数据与数据项之间的依赖关系的具体流程图。在本实施例中,所述计算数据与所述数据项之间的依赖关系采用如下步骤生成:
步骤S1001:读取所述计算数据的计算公式,获取所述计算公式中所有数据项。
步骤S1002:遍历各个数据项,获取所述数据项的路径名。
步骤S1003:存储已获取的所述计算数据的名和所有所述数据项的路径名,作为所述计算数据与所述数据项之间的依赖关系。
请参考图11,其为本申请的动态网页更新方法所述另一个实施例B中计算数据fj的依赖关系图。在本实施例中,在获取计算数据fj的过程中,将计算数据fj依赖的数据项f和数据项j推入内存deps中,内存deps保存该依赖关系。
步骤S903:根据所述依赖关系,获取与所述发生变化的数据项有依赖关系的所有所述计算数据,作为待更新的计算数据。
在本实施例中,当顶级对象监听到数据项变化时,将该变化通知给各个计算数据,各个计算数据接收到数据变化通知后,将发生变化的数据项的路径名与计算数据的依赖关系的各个数据项的路径名相比较,如果二者一致,则触发计算数据进行改变。
步骤S904:根据所述发生变化的数据项,更新所述待更新的计算数据。
请参考图12,其为本申请的动态网页更新方法所述另一个实施例B中步骤S605的具体流程图。在本实施例中,步骤S605包括:
步骤S1201:根据所述计算数据变化通知,获取所述更新的计算数据的名。
步骤S1202:根据所述计算数据的名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述更新的计算数据对应的所述网页元素和所述更新的计算数据在所述网页元素中的使用方式。
步骤S1203:根据所述更新的计算数据和所述更新的计算数据在所述网页元素中的使用方式,更新所述网页元素。
本申请提供的动态网页更新方法,通过获取计算数据与数据项之间的依赖关系,使得当数据项发生改变时,依赖数据项的计算数据也同步发生变化,从而实现针对动态网页中的计算数据进行细颗粒度的控制。
在上述的实施例中,提供了一种动态网页更新方法,与之相对应的,本申请还提供一种动态网页更新装置。请参看图13,其为本申请的动态网页更新装置实施例A的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例提供的一种动态网页更新装置,包括:
数据逐层发送单元101,用于数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点,其中,所述节点祖先中的各个节点向其父节点发送的所述数据变化通知至少包括:该节点的名和所述数据项在该节点的子节点处的路径名;所述根节点作为顶级对象;
第一发送单元102,用于所述顶级对象向所述动态网页转发来自其子节点的所述数据变化通知;
第一更新单元103,用于根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素;
其中,所述数据集的结构是树,所述数据项是所述数据集的叶节点。
可选的,所述装置还包括:
第一包装单元,用于将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性;
第一注册单元,用于将所述动态网页注册为所述顶级对象的观察者。
可选的,所述将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性,是指为所述数据集中各个非叶节点分配数据变化事件,当所述数据项发生变化时,所述数据项的父节点的数据变化事件被触发,并逐层向上触发所述数据项的所述节点祖先,直至所述根节点的数据变化事件被触发;当节点触发其父节点的数据变化事件时,向其父节点发送所述数据变化通知;当所述顶级对象的数据变化事件被触发后,所述顶级对象向其观察者发送所述数据变化通知。
可选的,所述装置还包括:
获取对应关系单元,用于获取所述动态网页中所有动态数据与所述网页元素之间的对应关系,以及所述动态数据在所述网页元素中的使用方式;
其中,所述动态数据是指数据项和计算数据,所述计算数据是指至少两个所述数据项的计算值,若所述数据项的类型为数字,则计算值是指数值运算的值;若所述数据项的类型为字符串,则计算值是指字符串操作的值。
可选的,所述获取对应关系单元包括:
获取所有元素子单元,用于获取所述动态网页中所有所述网页元素;
提取解析元素子单元,用于遍历各个所述网页元素,提取包括自定义属性的网页元素,对于遍历过程中经过的每一个包括自定义属性的网页元素,解析该网页元素,获取与该网页元素关联的所述动态数据,以及所述动态数据在所述网页元素中的使用方式;该网页元素和与其关联的所述动态数据之间形成所述动态数据与网页元素之间的对应关系。
可选的,所述动态数据在所述网页元素中的使用方式采取如下方式之一:所述动态数据作为所述网页元素的属性;所述动态数据作为所述网页元素的内容。
请参看图14,其为本申请的动态网页更新装置的另一个实施例B的示意图,是所述装置的优选实施例。在本实施例中,除了图13所示的单元之外,所述装置还包括:
第二发送单元201,用于所述顶级对象向所有计算数据转发来自其子节点的所述数据变化通知;
更新计算数据单元202,用于根据所述数据变化通知,更新与所述发生变化的数据项有依赖关系的所有计算数据,作为更新的计算数据;
第三发送单元203,用于各个所述更新的计算数据分别向所述顶级对象发送计算数据的名;
第四发送单元204,用于所述顶级对象向所述动态网页发送计算数据变化通知,所述计算数据变化通知包括所述更新的计算数据的名;
第二更新单元205,用于根据所述计算数据变化通知,更新所述动态网页中与所述更新的计算数据关联的网页元素。
可选的,所述装置还包括:
获取计算数据单元,用于获取所有与所述动态网页相关的计算数据;
第二包装单元,用于将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点;
第二注册单元,用于将各个所述计算数据注册为所述顶级对象的观察者。
可选的,所述将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点是指,为所述计算数据分配数据变化事件,当所述计算数据发生变化时,该数据变化事件被触发,所述计算数据向所述顶级对象发送所述计算数据的名,并触发所述顶级对象的数据变化事件。
可选的,所述更新计算数据单元包括:
获取路径名子单元,用于根据所述数据变化通知,获取所述发生变化的数据项的路径名;
获取依赖关系子单元,用于获取各个所述计算数据与所述数据项之间的依赖关系;
获取待更新计算数据子单元,用于根据所述依赖关系,获取与所述发生变化的数据项有依赖关系的所有所述计算数据,作为待更新的计算数据;
更新计算数据子单元,用于根据所述发生变化的数据项,更新所述待更新的计算数据。
可选的,所述装置还包括:
依赖关系生成单元,用于获取并存储所述计算数据与所述数据项之间的依赖关系;
所述依赖关系生成单元包括:
读取获取子单元,用于读取所述计算数据的计算公式,获取所述计算公式中所有数据项;
遍历获取子单元,用于遍历各个数据项,获取所述数据项的路径名;
存储子单元,用于存储已获取的所述计算数据的名和所有所述数据项的路径名,作为所述计算数据与所述数据项之间的依赖关系。
可选的,所述第二更新单元包括:
第一获取子单元,用于根据所述计算数据变化通知,获取所述更新的计算数据的名;
第一查找子单元,用于根据所述计算数据的名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述更新的计算数据对应的所述网页元素和所述更新的计算数据在所述网页元素中的使用方式;
第一更新子单元,用于根据所述更新的计算数据和所述更新的计算数据在所述网页元素中的使用方式,更新所述网页元素。
可选的,所述第一更新单元包括:
第二获取子单元,用于根据所述数据变化通知,获取所述发生变化的数据项的路径名;
第二查找子单元,用于根据所述数据项的路径名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述发生变化的数据项对应的所述网页元素和所述发生变化的数据项在所述网页元素中的使用方式;
第二更新子单元,用于根据所述发生变化的数据项和所述发生变化的数据项在所述网页元素中的使用方式,更新所述网页元素。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (26)
1.一种动态网页更新方法,其特征在于,包括:
数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点,其中,所述节点祖先中的各个节点向其父节点发送的所述数据变化通知至少包括:该节点的名和所述数据项在该节点的子节点处的路径名;所述根节点作为顶级对象;
所述顶级对象向所述动态网页转发来自其子节点的所述数据变化通知;
根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素;
其中,所述数据集的结构是树,所述数据项是所述数据集的叶节点。
2.根据权利要求1所述的动态网页更新方法,其特征在于,在所述数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点之前,还包括:
将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性;
将所述动态网页注册为所述顶级对象的观察者。
3.根据权利要求2所述的动态网页更新方法,其特征在于,所述将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性,是指为所述数据集中各个非叶节点分配数据变化事件,当所述数据项发生变化时,所述数据项的父节点的数据变化事件被触发,并逐层向上触发所述数据项的所述节点祖先,直至所述根节点的数据变化事件被触发;当节点触发其父节点的数据变化事件时,向其父节点发送所述数据变化通知;当所述顶级对象的数据变化事件被触发后,所述顶级对象向其观察者发送所述数据变化通知。
4.根据权利要求3所述的动态网页更新方法,其特征在于,在所述数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点之前,还包括:
获取所述动态网页中所有动态数据与所述网页元素之间的对应关系,以及所述动态数据在所述网页元素中的使用方式;
其中,所述动态数据是指数据项和计算数据,所述计算数据是指至少两个所述数据项的计算值,若所述数据项的类型为数字,则计算值是指数值运算的值;若所述数据项的类型为字符串,则计算值是指字符串操作的值。
5.根据权利要求4所述的动态网页更新方法,其特征在于,所述获取所述动态网页中所有动态数据与所述网页元素之间的对应关系,以及所述动态数据在所述网页元素中的使用方式,包括如下步骤:
获取所述动态网页中所有所述网页元素;
遍历各个所述网页元素,提取包括自定义属性的网页元素,对于遍历过程中经过的每一个包括自定义属性的网页元素,解析该网页元素,获取与该网页元素关联的所述动态数据,以及所述动态数据在所述网页元素中的使用方式;该网页元素和与其关联的所述动态数据之间形成所述动态数据与网页元素之间的对应关系。
6.根据权利要求4所述的动态网页更新方法,其特征在于,所述动态数据在所述网页元素中的使用方式采取如下方式之一:所述动态数据作为所述网页元素的属性;所述动态数据作为所述网页元素的内容。
7.根据权利要求4所述的动态网页更新方法,其特征在于,还包括:
所述顶级对象向所有计算数据转发来自其子节点的所述数据变化通知;
根据所述数据变化通知,更新与所述发生变化的数据项有依赖关系的所有计算数据,作为更新的计算数据;
各个所述更新的计算数据分别向所述顶级对象发送计算数据的名;
所述顶级对象向所述动态网页发送计算数据变化通知,所述计算数据变化通知包括所述更新的计算数据的名;
根据所述计算数据变化通知,更新所述动态网页中与所述更新的计算数据关联的网页元素。
8.根据权利要求7所述的动态网页更新方法,其特征在于,在所述顶级对象向所有计算数据转发来自其子节点的所述数据变化通知之前,还包括:
获取所有与所述动态网页相关的计算数据;
将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点;
将各个所述计算数据注册为所述顶级对象的观察者。
9.根据权利要求8所述的动态网页更新方法,其特征在于,所述将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点是指,为所述计算数据分配数据变化事件,当所述计算数据发生变化时,该数据变化事件被触发,所述计算数据向所述顶级对象发送所述计算数据的名,并触发所述顶级对象的数据变化事件。
10.根据权利要求7所述的动态网页更新方法,其特征在于,所述根据所述数据变化通知,更新与所述发生变化的数据项有依赖关系的所有所述计算数据包括:
根据所述数据变化通知,获取所述发生变化的数据项的路径名;
获取各个所述计算数据与所述数据项之间的依赖关系;
根据所述依赖关系,获取与所述发生变化的数据项有依赖关系的所有所述计算数据,作为待更新的计算数据;
根据所述发生变化的数据项,更新所述待更新的计算数据。
11.根据权利要求10所述的动态网页更新方法,其特征在于,所述计算数据与所述数据项之间的依赖关系采用如下步骤生成:
读取所述计算数据的计算公式,获取所述计算公式中所有数据项;
遍历各个数据项,获取所述数据项的路径名;
存储已获取的所述计算数据的名和所有所述数据项的路径名,作为所述计算数据与所述数据项之间的依赖关系。
12.根据权利要求7所述的动态网页更新方法,其特征在于,所述根据所述计算数据变化通知,更新所述动态网页中与所述更新的计算数据关联的网页元素包括:
根据所述计算数据变化通知,获取所述更新的计算数据的名;
根据所述计算数据的名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述更新的计算数据对应的所述网页元素和所述更新的计算数据在所述网页元素中的使用方式;
根据所述更新的计算数据和所述更新的计算数据在所述网页元素中的使用方式,更新所述网页元素。
13.根据权利要求4所述的动态网页更新方法,其特征在于,所述根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素包括:
根据所述数据变化通知,获取所述发生变化的数据项的路径名;
根据所述数据项的路径名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述发生变化的数据项对应的所述网页元素和所述发生变化的数据项在所述网页元素中的使用方式;
根据所述发生变化的数据项和所述发生变化的数据项在所述网页元素中的使用方式,更新所述网页元素。
14.一种动态网页更新装置,其特征在于,包括:
数据逐层发送单元,用于数据集中发生变化的数据项通过该数据项的节点祖先,逐层向上发送数据变化通知直至所述数据集的根节点,其中,所述节点祖先中的各个节点向其父节点发送的所述数据变化通知至少包括:该节点的名和所述数据项在该节点的子节点处的路径名;所述根节点作为顶级对象;
第一发送单元,用于所述顶级对象向所述动态网页转发来自其子节点的所述数据变化通知;
第一更新单元,用于根据所述数据变化通知,更新所述动态网页中与所述数据项关联的网页元素;
其中,所述数据集的结构是树,所述数据项是所述数据集的叶节点。
15.根据权利要求14所述的动态网页更新装置,其特征在于,还包括:
第一包装单元,用于将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性;
第一注册单元,用于将所述动态网页注册为所述顶级对象的观察者。
16.根据权利要求15所述的动态网页更新装置,其特征在于,所述将所述数据集中所有非叶节点构建为可监听的对象,所述数据项作为其父节点的属性,是指为所述数据集中各个非叶节点分配数据变化事件,当所述数据项发生变化时,所述数据项的父节点的数据变化事件被触发,并逐层向上触发所述数据项的所述节点祖先,直至所述根节点的数据变化事件被触发;当节点触发其父节点的数据变化事件时,向其父节点发送所述数据变化通知;当所述顶级对象的数据变化事件被触发后,所述顶级对象向其观察者发送所述数据变化通知。
17.根据权利要求16所述的动态网页更新装置,其特征在于,还包括:
获取对应关系单元,用于获取所述动态网页中所有动态数据与所述网页元素之间的对应关系,以及所述动态数据在所述网页元素中的使用方式;
其中,所述动态数据是指数据项和计算数据,所述计算数据是指至少两个所述数据项的计算值,若所述数据项的类型为数字,则计算值是指数值运算的值;若所述数据项的类型为字符串,则计算值是指字符串操作的值。
18.根据权利要求17所述的动态网页更新装置,其特征在于,所述获取对应关系单元包括:
获取所有元素子单元,用于获取所述动态网页中所有所述网页元素;
提取解析元素子单元,用于遍历各个所述网页元素,提取包括自定义属性的网页元素,对于遍历过程中经过的每一个包括自定义属性的网页元素,解析该网页元素,获取与该网页元素关联的所述动态数据,以及所述动态数据在所述网页元素中的使用方式;该网页元素和与其关联的所述动态数据之间形成所述动态数据与网页元素之间的对应关系。
19.根据权利要求17所述的动态网页更新装置,其特征在于,所述动态数据在所述网页元素中的使用方式采取如下方式之一:所述动态数据作为所述网页元素的属性;所述动态数据作为所述网页元素的内容。
20.根据权利要求17所述的动态网页更新装置,其特征在于,还包括:
第二发送单元,用于所述顶级对象向所有计算数据转发来自其子节点的所述数据变化通知;
更新计算数据单元,用于根据所述数据变化通知,更新与所述发生变化的数据项有依赖关系的所有计算数据,作为更新的计算数据;
第三发送单元,用于各个所述更新的计算数据分别向所述顶级对象发送计算数据的名;
第四发送单元,用于所述顶级对象向所述动态网页发送计算数据变化通知,所述计算数据变化通知包括所述更新的计算数据的名;
第二更新单元,用于根据所述计算数据变化通知,更新所述动态网页中与所述更新的计算数据关联的网页元素。
21.根据权利要求20所述的动态网页更新装置,其特征在于,还包括:
获取计算数据单元,用于获取所有与所述动态网页相关的计算数据;
第二包装单元,用于将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点;
第二注册单元,用于将各个所述计算数据注册为所述顶级对象的观察者。
22.根据权利要求21所述的动态网页更新装置,其特征在于,所述将各个所述计算数据构建为可监听的对象,并将所述计算数据作为所述顶级对象的子节点是指,为所述计算数据分配数据变化事件,当所述计算数据发生变化时,该数据变化事件被触发,所述计算数据向所述顶级对象发送所述计算数据的名,并触发所述顶级对象的数据变化事件。
23.根据权利要求20所述的动态网页更新装置,其特征在于,所述更新计算数据单元包括:
获取路径名子单元,用于根据所述数据变化通知,获取所述发生变化的数据项的路径名;
获取依赖关系子单元,用于获取各个所述计算数据与所述数据项之间的依赖关系;
获取待更新计算数据子单元,用于根据所述依赖关系,获取与所述发生变化的数据项有依赖关系的所有所述计算数据,作为待更新的计算数据;
更新计算数据子单元,用于根据所述发生变化的数据项,更新所述待更新的计算数据。
24.根据权利要求23所述的动态网页更新装置,其特征在于,所述装置还包括:
依赖关系生成单元,用于获取并存储所述计算数据与所述数据项之间的依赖关系;
所述依赖关系生成单元包括:
读取获取子单元,用于读取所述计算数据的计算公式,获取所述计算公式中所有数据项;
遍历获取子单元,用于遍历各个数据项,获取所述数据项的路径名;
存储子单元,用于存储已获取的所述计算数据的名和所有所述数据项的路径名,作为所述计算数据与所述数据项之间的依赖关系。
25.根据权利要求20所述的动态网页更新装置,其特征在于,所述第二更新动态网页单元包括:
第一获取子单元,用于根据所述计算数据变化通知,获取所述更新的计算数据的名;
第一查找子单元,用于根据所述计算数据的名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述更新的计算数据对应的所述网页元素和所述更新的计算数据在所述网页元素中的使用方式;
第一更新子单元,用于根据所述更新的计算数据和所述更新的计算数据在所述网页元素中的使用方式,更新所述网页元素。
26.根据权利要求17所述的动态网页更新装置,其特征在于,所述第一更新单元包括:
第二获取子单元,用于根据所述数据变化通知,获取所述发生变化的数据项的路径名;
第二查找子单元,用于根据所述数据项的路径名,在所述动态网页中所有动态数据与所述网页元素之间的对应关系中,获取与所述发生变化的数据项对应的所述网页元素和所述发生变化的数据项在所述网页元素中的使用方式;
第二更新子单元,用于根据所述发生变化的数据项和所述发生变化的数据项在所述网页元素中的使用方式,更新所述网页元素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410450258.1A CN105389315B (zh) | 2014-09-04 | 2014-09-04 | 一种动态网页更新方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410450258.1A CN105389315B (zh) | 2014-09-04 | 2014-09-04 | 一种动态网页更新方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105389315A true CN105389315A (zh) | 2016-03-09 |
CN105389315B CN105389315B (zh) | 2019-04-12 |
Family
ID=55421612
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410450258.1A Active CN105389315B (zh) | 2014-09-04 | 2014-09-04 | 一种动态网页更新方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105389315B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020996A (zh) * | 2016-05-11 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 数据更新方法及数据更新装置 |
CN107092485A (zh) * | 2017-03-28 | 2017-08-25 | 武汉斗鱼网络科技有限公司 | 一种Tab标签动态更新方法及装置 |
CN107229652A (zh) * | 2016-03-25 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 一种账户数据以及账户资产数据更新方法、装置及系统 |
CN108121753A (zh) * | 2016-11-30 | 2018-06-05 | 北京国双科技有限公司 | 数据监测方法及装置 |
CN108549570A (zh) * | 2018-04-28 | 2018-09-18 | 北京小米移动软件有限公司 | 用户界面的更新方法及装置 |
CN108628629A (zh) * | 2018-05-21 | 2018-10-09 | 网易(杭州)网络有限公司 | Ui更新方法、装置、设备及存储介质 |
CN109445840A (zh) * | 2018-11-07 | 2019-03-08 | 北京字节跳动网络技术有限公司 | 一种网页的动态更新方法、装置、电子设备及存储介质 |
CN109684339A (zh) * | 2018-11-21 | 2019-04-26 | 金蝶软件(中国)有限公司 | 供需单据的调整方法、装置、计算机设备和存储介质 |
CN109885794A (zh) * | 2019-01-24 | 2019-06-14 | 曲阜师范大学 | 基于区块链的循环式同步更新网页的处理方法 |
CN110019464A (zh) * | 2017-11-24 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 页面处理方法及装置 |
CN110321139A (zh) * | 2018-03-29 | 2019-10-11 | 广东神马搜索科技有限公司 | 数据管理方法和系统 |
CN110457132A (zh) * | 2019-08-01 | 2019-11-15 | 武汉斗鱼鱼乐网络科技有限公司 | 一种功能对象的创建方法、装置和终端设备 |
CN111741257A (zh) * | 2020-05-21 | 2020-10-02 | 深圳市商汤科技有限公司 | 数据处理方法及装置、电子设备及存储介质 |
CN112988755A (zh) * | 2021-04-14 | 2021-06-18 | 北京商越网络科技有限公司 | 关联数据的自动选值方法和装置、设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983257A (zh) * | 2006-05-11 | 2007-06-20 | 华为技术有限公司 | 一种通过树型结构展现数据的方法及系统 |
CN101192233A (zh) * | 2007-03-29 | 2008-06-04 | 腾讯科技(深圳)有限公司 | 一种对网页进行动态更新的方法、系统及设备 |
CN102354316A (zh) * | 2011-09-22 | 2012-02-15 | 用友软件股份有限公司 | 数据更新装置和数据更新方法 |
WO2014130580A2 (en) * | 2013-02-19 | 2014-08-28 | Quick Eye Technologies Inc. | Data visualization techniques |
-
2014
- 2014-09-04 CN CN201410450258.1A patent/CN105389315B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983257A (zh) * | 2006-05-11 | 2007-06-20 | 华为技术有限公司 | 一种通过树型结构展现数据的方法及系统 |
CN101192233A (zh) * | 2007-03-29 | 2008-06-04 | 腾讯科技(深圳)有限公司 | 一种对网页进行动态更新的方法、系统及设备 |
CN102354316A (zh) * | 2011-09-22 | 2012-02-15 | 用友软件股份有限公司 | 数据更新装置和数据更新方法 |
WO2014130580A2 (en) * | 2013-02-19 | 2014-08-28 | Quick Eye Technologies Inc. | Data visualization techniques |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107229652A (zh) * | 2016-03-25 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 一种账户数据以及账户资产数据更新方法、装置及系统 |
CN106020996A (zh) * | 2016-05-11 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 数据更新方法及数据更新装置 |
CN108121753B (zh) * | 2016-11-30 | 2021-09-17 | 北京国双科技有限公司 | 数据监测方法及装置 |
CN108121753A (zh) * | 2016-11-30 | 2018-06-05 | 北京国双科技有限公司 | 数据监测方法及装置 |
CN107092485A (zh) * | 2017-03-28 | 2017-08-25 | 武汉斗鱼网络科技有限公司 | 一种Tab标签动态更新方法及装置 |
CN110019464B (zh) * | 2017-11-24 | 2023-10-20 | 阿里巴巴(中国)网络技术有限公司 | 页面处理方法及装置 |
CN110019464A (zh) * | 2017-11-24 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 页面处理方法及装置 |
CN110321139A (zh) * | 2018-03-29 | 2019-10-11 | 广东神马搜索科技有限公司 | 数据管理方法和系统 |
CN108549570A (zh) * | 2018-04-28 | 2018-09-18 | 北京小米移动软件有限公司 | 用户界面的更新方法及装置 |
CN108549570B (zh) * | 2018-04-28 | 2021-10-26 | 北京小米移动软件有限公司 | 用户界面的更新方法及装置 |
CN108628629A (zh) * | 2018-05-21 | 2018-10-09 | 网易(杭州)网络有限公司 | Ui更新方法、装置、设备及存储介质 |
CN108628629B (zh) * | 2018-05-21 | 2022-02-22 | 网易(杭州)网络有限公司 | Ui更新方法、装置、设备及存储介质 |
CN109445840B (zh) * | 2018-11-07 | 2021-12-10 | 北京字节跳动网络技术有限公司 | 一种网页的动态更新方法、装置、电子设备及存储介质 |
CN109445840A (zh) * | 2018-11-07 | 2019-03-08 | 北京字节跳动网络技术有限公司 | 一种网页的动态更新方法、装置、电子设备及存储介质 |
CN109684339B (zh) * | 2018-11-21 | 2021-10-08 | 金蝶云科技有限公司 | 供需单据的调整方法、装置、计算机设备和存储介质 |
CN109684339A (zh) * | 2018-11-21 | 2019-04-26 | 金蝶软件(中国)有限公司 | 供需单据的调整方法、装置、计算机设备和存储介质 |
CN109885794B (zh) * | 2019-01-24 | 2020-10-20 | 曲阜师范大学 | 基于区块链的循环式同步更新网页的处理方法 |
CN109885794A (zh) * | 2019-01-24 | 2019-06-14 | 曲阜师范大学 | 基于区块链的循环式同步更新网页的处理方法 |
CN110457132A (zh) * | 2019-08-01 | 2019-11-15 | 武汉斗鱼鱼乐网络科技有限公司 | 一种功能对象的创建方法、装置和终端设备 |
CN110457132B (zh) * | 2019-08-01 | 2022-08-05 | 武汉斗鱼鱼乐网络科技有限公司 | 一种功能对象的创建方法、装置和终端设备 |
CN111741257A (zh) * | 2020-05-21 | 2020-10-02 | 深圳市商汤科技有限公司 | 数据处理方法及装置、电子设备及存储介质 |
CN111741257B (zh) * | 2020-05-21 | 2022-01-28 | 深圳市商汤科技有限公司 | 数据处理方法及装置、电子设备及存储介质 |
CN112988755A (zh) * | 2021-04-14 | 2021-06-18 | 北京商越网络科技有限公司 | 关联数据的自动选值方法和装置、设备 |
CN112988755B (zh) * | 2021-04-14 | 2024-06-11 | 北京商越网络科技有限公司 | 关联数据的自动选值方法和装置、设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105389315B (zh) | 2019-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105389315A (zh) | 一种动态网页更新方法及装置 | |
Sevilla Ruiz et al. | Inferring versioned schemas from NoSQL databases and its applications | |
CN109597661B (zh) | 一种业务功能配置方法及装置 | |
CN109845221A (zh) | 用于服务层的访问控制策略同步 | |
CN104778196A (zh) | 用于数据分析的输入模式的动态数据驱动生成与修改 | |
US10242051B2 (en) | Efficient multi-tenant spatial and relational indexing | |
CN105556545A (zh) | 用于众包领域特定情报的设备、系统和方法 | |
CN106897053B (zh) | 一种代码发布方法与装置 | |
CN104160394A (zh) | 用于半结构化数据的可缩放分析平台 | |
CN109976803B (zh) | 一种文件的生成方法及装置 | |
CN105630522A (zh) | 一种Web应用的更新方法、装置和系统 | |
US20140157108A1 (en) | Live-updating web page generation | |
CN103927385A (zh) | 数据模型的统一方法及装置 | |
US11537367B1 (en) | Source code conversion from application program interface to policy document | |
CN106257418A (zh) | 用于通过使用辅助应用来评价应用的技术 | |
CN104216708A (zh) | 一种数据监控的方法和装置 | |
CN105373536A (zh) | 一种实现dao接口的方法及装置 | |
US20170193409A1 (en) | Business resource modeling | |
CN103984554A (zh) | 软件设计文档的生成方法及装置 | |
KR20150133902A (ko) | 소프트웨어 제품 라인에 기반한 서비스 개발 시스템 및 방법 | |
US20170147424A1 (en) | Additional message information handling for applications | |
Miravet et al. | Framework for the declarative implementation of native mobile applications | |
US9501536B1 (en) | Query plan generation for queries having common expressions | |
KR20130068601A (ko) | 질의 기반 소프트웨어 논리의 동적 변경 및 실행을 위한 멀티테넌트 지원 장치 및 방법 | |
Song et al. | Time‐Free Solution to Hamilton Path Problems Using P Systems with d‐Division |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240218 Address after: Room 01, 45th Floor, AXA Building, 8 Shanton Road, Singapore Patentee after: Alibaba Singapore Holdings Ltd. Country or region after: Singapore Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands Patentee before: ALIBABA GROUP HOLDING Ltd. Country or region before: Cayman Islands |