数据项管理器的制作方法

文档序号:6363663阅读:157来源:国知局
专利名称:数据项管理器的制作方法
数据项管理器
背景技术
应用(application)和/或控制(control)可充当本地和/或远程数据源的客户端以显示来自这些数据源的项列表。如本文所用的,列表为项的有序的序列且客户端可为应用和/或控制。使用许多不同接口或协议之一从每个数据源获得数据,且利用用户接口呈现给终端用户以便导航且可能修改列表。取决于数据源,可使用项在列表中的索引和/ 或使用“密钥”来提取项,“密钥”对于每个项不同且对于该项而言是不变的。某些数据源, 诸如本地数据源,能对于数据的请求同步响应,且数据源将请求的数据传递到项管理器,之后项管理器重新开始执行。这种对数据请求的响应通常花费比某响应时间阈值更少的时间,所述响应时间阈值例如是足够低的阈值,使得响应的呈现可以显得与相对应的请求实时。举例而言,这样的响应可用大约数十毫秒或更短。其它数据源,诸如远程数据源,可异步响应,且在请求后,项管理器重新开始执行且在后来的时间从数据源接收请求的数据。这种对数据请求的响应通常花费比上文所讨论的响应时间阈值更多的时间。当对列表中的数据做出变化时,数据源可或可不向应用生成通知。举例而言,web服务器通常并不在数据变化时向客户端提供变化通知。

发明内容
所描述的实施例包括在本文中被称作项管理器的模块,其能与数据源经由在本文被称作数据源适配器的另一模块交互,且也能与客户端交互以提供表示来自数据源的数据项的数据表示项的列表。如本文所用的,数据项为由数据源提供的项。数据项可为与在数据源中存储相对应数据项的格式相同或不同的格式。数据表示项为数据项的表示且数据表示项可为与由数据表示项所表示的数据项相同或不同的格式。在一个实施例中,工具和技术可包括项管理器,项管理器经由数据源适配器从数据源请求数据项且经由数据源适配器从数据源接收数据项。项管理器也可维护表示从数据源接收的数据项的数据表示项的列表。此外,项管理器可向客户端提供贯穿数据表示项的列表的列举。项管理器也可向客户端提供数据表示项的列表变化的通知。在另一实施例中,项管理器可经由数据源适配器从数据源请求和接收数据项。项管理器也可维护表示从数据源接收的数据项的数据表示项的列表。数据表示项可包括用户接口元素。而且,维护该列表可包括调动再现器来再现来自从数据源接收的数据项的数据表示项且在该列表中包括数据表示项。项管理器可向客户端提供贯穿数据表示项的列表的列举。提供本发明内容以便以简化的形式介绍概念的选择。这些概念在具体实施方式
中进一步展开描述。此发明内容不预期标识所要求保护的主题的关键特征或必要特征,也不预期用于限制所要求保护的主题的范围。类似地,本发明不限于解决背景技术具体实施方式
和附图中讨论的特定技术、工具、环境、缺点或优点的实施方式。


图I为其中可实施所描述的实施例中的一个或多个的合适计算环境的方块图。图2为数据项管理器系统或环境的示意图。图3为原始本地数据表示的一部分、所接收的以刷新操作提取的更新的数据项列表和在运行列表生成技术之后所得到的更新的本地数据表示的部分的示意图。图4为数据项管理器技术的流程图。图5为另一数据项管理器技术的流程图。图6为又一数据项管理器技术的流程图。
具体实施例方式本文所述的实施例针对于用于改进客户端的数据表示项的列表的处置的技术和工具。可通过单独地或组合地使用各种技术和工具得到这些改进。这样的技术和工具可包括项管理器,项管理器能通过数据源适配器与数据源接口从而获得数据项。项管理器也可与客户端接口以向客户端提供贯穿表示数据项的数据表示项的列表的列举。项管理器可提供本文所讨论的特征中的一个或多个特征。举例而言,数据表示项可为表示数据项的用户接口元素。项管理器可支持数据表示项的列表的同步列举,即使在数据表示项表示来自异步数据源的数据项时。举例而言,这可使用占位符来进行,如将在下文中所讨论的那样。如本文所用的,占位符为代替所请求的数据表示项返回到客户端的对象。占位符可呈各种形式中的任何形式。举例而言,占位符(一个或多个)和在项管理器所维护的高速缓存中的实际数据表示项可呈再现的用户接口元素的形式。可替换地,占位符和/或数据表示项可呈某些其它形式,诸如呈不透明句柄(opaque handle)或某些其它数据类型的形式。此外,在由项管理器所用的本地数据表示中的占位符可呈与响应于来自客户端的请求而返回到客户端的占位符不同的形式。项管理器也可向客户端提供数据表示项变化的通知,即使在项管理器与不提供针对表示的数据项的这种通知的数据源接口时。项管理器也可允许加载待优先化的数据表示项的资源,且也可延迟向客户端提供数据表示项直到已加载了该数据表示项的资源为止。 此外,项管理器可提供数据表示项的同步更新,即使是对于异步数据源。项管理器可向客户端提供数据的自相一致的快照(例如,无重复索引),即使是对于可快速变化的异步数据源。项管理器也可包括一个或多个特征来改进较差网络连接和其它故障的耐受性。项管理器可与数据源适配器接口以允许数据源返回比项管理器所请求的更少或更多项。而且,项管理器可请求数据表示项的列表的重叠子集。该重叠可由项管理器用于记住在列表中的定位而无需数据源维护光标,且其也可由项管理器用于检测列表变化。项管理器可与数据源接口,无论数据源是否支持到数据源的数据项列表内的索引和/或允许使用“密钥”提取项,“密钥”对于每个数据项不同且对于该项而言是不变的。 项管理器也可提供数据虚拟化,其可以包括在数据项由客户端请求时和通过释放不再由客户端使用的数据表示项来提取所述数据项。这可减小用于维护数据表示项的列表的带宽和存储。此外,项管理器可对数据表示项的用户修改的状态实施水合(hydration)(脱水 (dehydration)和再水合(rehydration))。举例而言,状态可为响应于用户输入所做出的变化,用户输入能通过存储于特定位置,诸如存储于存储器和/或长期存储设备中而脱水。该状态能表示数据表示项的变化,诸如响应于用户输入的变化。项管理器能从列表移除数据表示(例如,通过删除该表示和/或从存储器移除整个列表),且能在后来将数据表示项重新插回到列表内。项管理器能将该状态再水合回到数据表示项内。这可在数据表示项重新插入到列表内之前或之后进行。或者,项管理器可提供通知来允许客户端执行状态的脱水和再水合。在所附权利要求中所限定的主题不必限于本文所述的益处。本发明的特定实施方式可提供本文所述益处中的所有益处、某些益处或不提供任何本文所述的益处。尽管为了呈现起见,各种技术的操作在本文中以特定顺序次序描述,但应了解这种描述方式涵盖操作次序的重新布置,除非需要特定排序。举例而言,顺序描述的操作可在某些情况下重新布置或同时执行。此外,为了简单起见,流程图可不示出其中可结合其它技术使用的特定技术的各种方式。本文所述的技术可结合本文所述的系统中的一个或多个和/或结合一个或多个其它系统使用。举例而言,本文所述的各种过程可利用硬件或软件或二者的组合来实施。举例而言,能构想到专用的硬件实施,诸如专用集成电路、可编程的逻辑阵列和其它硬件设备来实施本文所述技术中的一个或多个的至少一部分。可包括各种实施例的设备和系统的应用能广泛地包括多种电子和计算机系统。可使用两个或更多特别互连的硬件模块或设备来实施技术,所述特别互连的硬件模块或设备具有可以在模块之间以及通过模块传送的控制和数据信号,或者作为专用集成电路的部分。此外,本文所述的技术可由计算机系统可执行的软件程序来实施。举例而言,实施方式可包括分布式处理、组件/对象分布式处理和并行处理。而且,能构想虚拟计算机系统处理来实施如本文所述的技术和功能中的一个或多个。I.示范性计算环境
图I示出其中可实施所描述的实施例中的一个或多个的合适计算环境(100)的一般化实例。举例而言,一个或多个这样的计算环境可用作如本文所讨论的客户端、项管理器、 数据源适配器和/或数据源的环境。一般而言,能使用各种不同的通用或专用计算系统配置。可适于结合本文所述的工具和技术使用的熟知计算系统配置的实例包括但不限于服务器场和服务器集群、个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、可编程的消费电子器件、网络PC、微型计算机、大型计算机、包括上述系统或设备中的任一个的分布式计算环境等。计算环境(100)不预期暗示对于本发明的用途或功能范围的任何限制,因为本发明可在多种通用或专用计算环境中实施。参看图1,计算环境(100)包括至少一个处理单元(110)和至少一个存储器
(120)。在图I中,这种最基本的配置(130)包括于虚线中。处理单元(110)执行计算机可执行的指令且可为真实的或虚拟的处理器。在多处理系统中,多个处理单元执行计算机可执行的指令以增强处理能力。至少一个存储器(120)可为易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPR0M、闪存)或这两个的某种组合。至少一个存储器(120)存储实施数据项管理器的软件(180)。尽管为了清楚起见,图I的各个方块以线示出,实际上描写的各种组件并非如此清晰且象征性地,下文所讨论的图I和其它附图中的线将更准确地为灰色的且模糊的。举例而言,可考虑诸如显示设备的呈现组件为I/o组件。而且,处理器具有存储器。本发明人认识到这是该技术的性质且重申图I的示意图只是说明可结合本发明的一个或多个实施例使用的示例性计算设备。在诸如“工作站”、“服务器”、“膝上型计算机”、“手持设备”等类别之间并无区别,因为这些全都在图I的范围中设想到且指“计算机”、“计算环境”或“计算设备”。计算环境(100)可具有附加特征。在图I中,计算环境(100)包括存储设备(140), 一个或多个输入设备(150)、一个或多个输出设备(160)和一个或多个通信连接(170)。诸如总线、控制器或网络这样的互连机构(未图示)使得计算环境(100)的各组件互连。通常,操作系统软件(未图示)提供用于在计算环境(100)中执行的其它软件的操作环境且协调计算环境(100)的组件的活动。存储设备(140)可为可移除的或不可移除的,且可包括计算机可读的存储介质, 诸如磁盘、磁带或磁盒、CD-ROM、CD-RW、DVD或任何其它介质,其可用于存储信息且其可在计算环境(100)内被存取。存储设备(140)存储用于软件(180)的指令。输入设备(一个或多个)(150)可为触摸输入设备,诸如键盘、鼠标、钢笔或跟踪球; 语音输入设备;扫描设备;网络适配器;CD/DVD读取器;或提供输入到计算环境(100)的另一个设备。输出设备(一个或多个)(160)可为显不器、打印机、扬声器、⑶/DVD刻录机、网络适配器或提供来自计算环境(100)的输出的另一设备。通信连接(一个或多个)(170)允许经过通信介质与另一计算实体通信。因此,计算环境(100)可使用到诸如个人计算机、服务器、路由器、网络PC、对等设备或另一公共网络节点的一个或多个远程计算设备的逻辑连接而操作于网络化环境中。通信介质以调制数据信号传达诸如数据或计算机可执行的指令或请求的信息。经调制的数据信号为其特征中一个或多个特征被设置或改变为使得在信号中编码信息的信号。举例而言且并无限制意义, 通信介质包括利用电、光学、RF、红外、声的或其它载波实施的有线或无线技术。工具和技术可在计算机可读介质的一般情形下描述,其可为存储介质或通信介质。计算机可读存储介质为能在计算环境内存取的任何可用存储介质,但术语计算机可读存储介质并不指信号本身。举例而言且并无限制意义,对于计算环境(100),计算机可读存储介质包括存储器(120)、存储设备(140)和上述组合。工具和技术能在计算机可执行的指令的一般情形下描述,诸如包括于程序模块中,在目标真实或虚拟处理器上的计算环境中执行的那些。一般而言,程序模块包括例程、 程序、库、对象、类,组件、数据结构等,其执行特定任务或实施特定抽象数据类型。程序模块的功能在各个实施例中可根据需要在程序模块之间组合或拆分。用于程序模块的计算机可执行的指令可在本地或分布式计算环境内执行。在分布式计算环境中,程序模块可位于本地和远程计算机存储介质中。为了呈现起见,详细描述使用如“确定”、“选择”、“请求”和“接收”这样的术语来描述在计算环境中的计算机操作。这些和其它类似术语为由计算机执行的操作的高层次抽象,且不应与人执行的行为混淆,除非明确地指出了由人(诸如“用户”)执行行为。对应于这些术语的实际计算机操作取决于实施方式而变化。II.数据项管理系统和环境
图2为数据项管理器系统或环境(200)的示意图,结合数据项管理器系统或环境(200) 可实施所描述的实施例中的一个或多个。现将提供环境(200)的概要,之后为环境(200)的更详细描述。A.数据项管理器环境的概要
环境(200)可包括项管理器(210),项管理器(210)能被配置成通过数据源适配器 (222)与数据源(220)交互。数据源适配器(222)能具体地被配置成与特定类型的数据源 (220)或甚至数据源(220)的特定实例交互。数据源(220)能管理数据项列表(226)中的数据项(224)。项管理器(210)能调用数据源接口(230),通过数据源适配器(222)从数据源 (220)提取数据项(224)。此外,数据源适配器(222)能调用数据通知处理程序接口(232) 以通知项管理器(210)数据项(224)的变化,如果数据源(220)能发布这种通知。项管理器(210)也可与项再现器(240)和占位符再现器(242)交互。举例而言, 再现器(240和242)能产生用于本地数据表示(250)的项,其表示在数据源(220)中的数据项列表(226)的至少一部分。举例而言,项管理器(210)可调用项再现器(240)来将数据项(224)再现为数据表示项(254)。如果数据源(220)和数据源适配器(222)不同步地返回所请求的数据项(224),那么项管理器(210)可调用占位符再现器(224)来再现待用的占位符(255)而不是实际数据表示项(254)直到返回了相对应的数据项(224)为止。占位符(255)和数据表示项(254)能包括于数据表示项的列表(256)中,其能由项管理器(210) 管理。而且,项管理器(210)能使得数据表示项(254)和数据表示项的列表(256)的占位符(255)对于客户端(260)而言可用,向客户端提供数据表示项的列表(256)的列举。客户端(260)可包括应用(262)、控制(264)或其组合。在图2的图示实施例中, 客户端(260)包括应用(262)和控制(264)。但是,客户端(260)可仅包括应用或仅包括控制。在图2的实施例中,控制(264)能调用项管理器接口(270)以请求数据表示项(254) (此可认为是请求数据项(224)本身或从项管理器(210)请求数据表示项(254)。此外,项管理器(210)能调用元素通知处理程序接口(272)来通知控制(264)数据表示项的列表 (256)的变化。此外,列表编辑器接口(280)能由控制(264)或应用(262)调用以请求对数据表示项的列表(256)和数据项列表(226)做出变化。而且,项通知处理程序接口(282) 能由项管理器(210)调用以向应用(262)提供通知,诸如关于项管理器(210)状态的通知, 以及如果客户端(260)执行这些任务,脱水和再水合数据表示项(254)的状态的通知。实际上,客户端(260)能通过项管理器接口(270)请求数据表示项(254)。项管理器(210)又可以通过数据源适配器(222)从数据源(220)提取相对应的数据项(224)。 数据项(224)能经由数据源适配器(222)返回,且可由项再现器(240)实例化为数据表示项(254)且包括于数据表示项的列表(256)中。项管理器(210)能向客户端(260)提供数据表示项(254),诸如通过向客户端(260)提供到本地数据表示(250)中的项的指针。客户端(260)也可通过列表编辑器接口(280)请求对数据表示项的列表(256)和数据项列表 (226)做出变化。项管理器(210)能对数据表示项的列表(256)做出这些变化且能通过调用数据源接口(230)并经由数据源适配器(222)请求变化来请求数据源(220)对数据项列表(226)做出这些变化。而且,数据源(220)可通过数据通知处理程序接口(232)告知项管理器数据项列表(226)的变化且项管理器(210)能通过元素通知处理程序接口(272)告知客户端(260)数据表示项的列表(256)的变化。B.数据项管理器环境的细节
项管理器(210)可以是以标准语言和格式实施的模块,例如实施在ECMAScript文本文
8件中。可替换地,项管理器的代码可为一些其它格式,诸如动态链接库的格式,或者项管理器可更密切地合并到应用本身内,诸如在静态库中。项管理器可为能重新使用的模块。术语能重新使用指项管理器为能插入到各种不同环境中以与客户端和数据源交互的模块。在这样的不同的环境中,客户端和/或数据源可不同地配置,但项管理器仍能提供用于客户端和数据源的接口。举例而言,项管理器可包括于客户端应用的代码中,项管理器可为单独于客户端的组件但运行于与客户端相同的过程中,项管理器可包括于这样的环境中,其中项管理器以独立于相应客户端的过程而运行,等等。数据项(224)可为各种不同格式中的任何格式,且可当它们在环境(200)的组件内和/或环境(200)的组件之间传递时可翻译。举例而言,数据源适配器(222)可将数据项(224)转换为ECMAScript对象,其可具有JSON(JavaScript对象表示法)可串行化的 ECMAScript对象为性质,其表示用作项密钥的项数据和串(或其它数据结构)。每个这样的密钥可为对于数据项而言不改变的值,且其不同于数据源(220)中数据集中其它数据项的密钥。举例而言,密钥可为由用于保持记录的数据源(220)构成的密钥或者它们可为识别符,诸如驱动器登记号、社会安全号等。对于这样的密钥表示敏感信息的情况,可采取适当安全措施,诸如加密技术来保护这些密钥。这些密钥能由项管理器用于保持记录,诸如区分和/或匹配相对应的数据项和/或数据表示项。项再现器(240)可以各种形式之一实例化数据表示项(254),诸如HTML文档对象模型(DOM)元素子树的形式。I.数据源接口
数据源适配器(222)可为客户侧模块,其与数据源(220)接口且向项管理器(210)提供数据源接口(230)。数据源接口(230)可在由项管理器(210)调用时实施由数据源适配器(222)执行的方法。在本文中将给出这些和其它方法的伪代码的实例。应了解,命名惯例、方法的布置以及甚至图2中模块的总布置可以其它方式来实施。考虑到这一点,下面为这些方法之一的实例,itemsFromKey,以伪代码示出用于调用该方法
void itemsFromKey(string key, Integer countBefore, Integer countAfter, function void itemsAvailable(
Array results,
Integer offset,
Integer count,
Integer index
在此方法中,请求由字符串“key”指示的数据项(224),以及在数据项列表(226)中的具有给定密钥的数据项(224)之前的数据项(224)的数量(Integer countBefore)和具有给定密钥的数据项(224)之后的数据项(224)的数量(Integer countAfter) 0因此,这限定了在所请求的列表中数据项(224)的范围。但是,可允许数据源(220)返回比此范围所示的更多或更少的数据项(224),可能在某约束内。举例而言,数据源(220)可返回至少由给定密钥所示的数据项(224)和之前的一项和之后的一项(如果Integer countBefore和 Integer countAfter各具有至少一的值)。如在上文的伪代码中所示的那样,itemsFromKey方法也传递被称作itemsAvailable的回调函数,当来自数据源(220)的数据项(224)可用时,数据源适配器(222)可调用该函数。数据源适配器(222)可同步地或异步地调用itemsAvailable回调函数以取决于是否能同步返回数据项(224)而同步地或异步地返回数据项(224)。在调用此函数时,数据源适配器能在“结果”中包括一个或多个数据项(224)的阵列。在阵列“结果”中的数据项(224)能布置成与所包括的数据项在数据项列表(226)中相同的次序。在结果中的每个数据项(224)可以下面的形式包括密钥和数据对象{key: “…”, dataObject:…}。对itemsAvailable函数的调用也能指示由阵列“results (结果)”中的给定密钥所示的数据项(224)的偏移(整数“offset (偏移)”)。举例而言,如果在阵列“results”中具有给定密钥的数据项(224)为在阵列中的第三项,那么整数“offset”能具有值二。这能允许项管理器(210)将在结果内定位具有给定密钥的数据项(224)。数据源适配器(222)也可包括在数据源(220)处的总数据项列表(226)中的数据项(224)数量的计数(整数“count”),如果这种计数为数据源(220)当前已知的且提供给数据源适配器(222)。数据源适配器(222)也可包括具有给定密钥的数据项(224)的索引(整数 “index”),其能指示具有给定密钥的数据项(224)在总数据项列表(226)中的位置或偏移。除了 itemsFromKey之外,数据源适配器(222)可实施其它方法,这些方法能通过数据源接口(230)调用以取回数据项(224)。这些其它方法可类似于itemsFromKey方法,但所示项可以其它方式指示。举例而言,数据源适配器(222)可实施itemsFromEnd, 项管理器(210)可通过itemsFromEnd请求始于数据项列表(226)的结尾且往回计数规定计数(整数“count”)的数据项(224)的范围,如由用于调用该方法的下面的伪代码所 7]\ (移除了回调函数 itemsAvailable 的细节)“void itemsFromEnd (Integer count, function void itemsAvailable (···)) ”。作为另一实例,数据源适配器(222)可实施 itemsFromStart,项管理器(210)可通过itemsFromStart请求从数据项列表(226)开始且向前计数规定计数(整数“count”)的数据项(224)的范围,如由用于调用该方法的下面的伪代码所不(移除了回调函数 itemsAvailable 的细节)“void itemsFromStart (Integer count, function void itemsAvailable (…))”。作为又一实例,数据源适配器(222)可实施itemsFromlndex,项管理器(210)可通过itemsFromlndex请求在具有规定索引(由整数“index”所示)的数据项(224)之前(如由integer countBefore所示)和之后(如由integer countAfter所示)的数据项的范围,如在用于调用该方法的下面的伪代码中所不的那样“void itemsFromlndex (Integer index, Integer countBefore, Integer countAfter, function void itemsAvailable (…))”。作为又一实例,数据源适配器(222) 可实施itemsFromPrefix,项管理器(210)可通过itemsFromPrefix请求在具有规定前缀或描述(由字符串“prefix”所示)的数据项(224)之前(如由integer countBefore所示) 和之后(如由integer countAfter所示)的数据项的范围,如在用于调用该方法的下面的伪代石马中所不的那样“void itemsFromPrefix (string prefix, Integer countBefore, Integer countAfter, function void itemsAvailable (…)),,。数据源适配器(222)可实施所有这些方法,比所有这些方法少的方法。而且,数据源适配器(222)可实施其它方法,作为上文所讨论的那些方法的补充或替代。举例而言,环境(200)可被配置成使得数据源至少实施itemsFromlndex方法或itemsFromKey和 itemsFromStart 方法。
数据源(220)和数据源适配器(222)能被配置成在结果阵列中返回至少所请求的项(如果其存在)。范围参数(integer count, integer countBefore 和 integer countAfter)能由数据源适配器(222)和数据源(220)构想为来自项管理器的提示,其将告知数据源(220)其试图获得什么项。数据源(220)能在每种情况下自由返回更少或更多项。但是,如果范围参数大于零,则数据源(220)和数据源适配器(222)能被配置成在由参数所指示的方向中返回至少一个附加项。当请求数据项列表(226)的一部分时,项管理器(210)能请求其已提取的数据项列表(226)中的相邻区域的重叠部分。项管理器(210)能使用此重叠信息来提供“下一 / 前一”列举给客户端(260),即使在数据源(220)不支持索引的情况下。项管理器(210)也可使用该重叠信息来检测数据项列表(226)的变化,其可提示项管理器(210)触发刷新操作(在下文中更多地讨论)。当数据项(224)的结果传递到项管理器(210)时,项管理器 (210)能验证结果不与项管理器(210)以数据表示项的列表(256)的形式高速缓存的数据项列表(226)的部分冲突。举例而言,如果项管理器(210)根据数据表示项的列表(256) 确定两个数据项(224)相邻(诸如用于这些项的数据表示项(254)在数据表示项的列表 (256)中相邻的情况下),但两个数据项(224)在结果阵列中并不相邻,这可指示矛盾。相似地,如果数据项(224)的索引改变,这可指示矛盾。在矛盾的情况下,项管理器能开始刷新操作(在下文中更多地讨论)以获得数据的一致视图,且能生成变化通知给客户端(260)。 通过避免向客户端(260)报告矛盾结果直到提取了用于解决该矛盾的足够信息为止,项管理器能呈现数据项(224)的自相一致的表示,即使该表示可能在过期的时间。2.数据通知处理程序接口
数据源适配器(222)也可调用关于数据通知处理程序接口(232)的方法,其为数据源适配器(222)能通过其通知项管理器(210)数据项列表(226)变化(或者简单地告知项管理器(210)某些事物变化使得能由项管理器(210)发起刷新操作)的接口。所有这样的通知可为可选的(例如,许多web数据源并不提供这样的通知)且能以某些其它方式维护一致性。举例而言,客户端(260)能周期性地告知项管理器(210) “刷新”所有数据,项管理器(210)被实例化以观察是否有任何事物变化,这将在下文中更多地讨论。3.再现器接口
如上文所指出的那样,项管理器(210)可调动项再现器(240)来将数据项(224)实例化为数据表示项(254),且项管理器(210)能调动占位符再现器(242)来实例化占位符
(255)。在一个实施方式中,项管理器(210)与再现器(240和242)之间的接口可由再现器 (240和242)来实现,其为能由项管理器(210)调用的函数。项再现器(240)能接受数据项 (224)且返回数据表示项(254),其可为用户接口元素,诸如由更小用户接口元素构成的树的用户接口元素。举例而言,再现器(240或242)的输出可为HTML字符串或DOM元素树。 但能替代地使用其它用户接口框架。举例而言,除了用户接口元素之外,再现器(240和/ 或242)中的一个或这两个能产生再现的输出。当调用占位符再现器(242)来实例化占位符(255)时,项管理器(210)可传递项的索引(或用于获得项的索引的函数)到占位符再现器(242)。但是,如果其为未知的,甚至可不传递索引。这是因为使用占位符(255)代替数据表示项(254)直到能提取相对应的数据项(224)为止。因此,关于对应于占位符(255)的数据项(224)已知很少(若有的话)信息。占位符(255)能充当句柄,其表示在数据表示项的列表(256)中的真实的数据表示项(254)的位置。当数据表示项(254)可用时,项管理器(210)可向客户端(260)传递到占位符(255)和数据表示项(254)的指针,且能告知客户端(260)利用适当数据表示项(254) 来替换占位符(255)。当项管理器(210)从数据源(220)请求数据时,项管理器(210)能检测数据源(220)是否同步(即,与重入调用一起)返回结果,且若如此,项管理器(210)能避免创建占位符(255),因为能同步返回实际数据表示项(254)。4.项管理器接口
项管理器接口(270)能向客户端(260)提供数据表示项的列表(256)的列举,其表示在数据源(220)的数据项列表(226)的至少一部分。该列举可为同步的,即使数据源(220) 并不同步响应,因为客户端实际上列举数据表示项的列表(256)。列举能始于数据项列表 (226)的开始或结尾(即,数据表示项的列表(256)表示数据项列表(226)的开始或结尾处点)或者在某些其它位置,诸如具有给定索引或密钥的数据表示项(254)。项管理器接口(270)的列举方法能返回数据表示项且某些能接受数据项(224) 的识别符或数据表示项(254)作为参数。下文为用于调用从数据表示项的列表(256)返回特定数据表示项的方法的伪代码的某些实例(其中的每一个表示在数据项列表(226) 中的数据项(224)) iiElement previousltem(Element item) ”,其返回表示在规定的数据表示“item”之前紧邻的数据项(224)的数据表示项(254) ,Element firstltemO”, 其返回表示数据项列表(226)中第一数据项(224)的数据表示项(254) ;“Element nextltem(Element item) ”,其返回表示数据项列表(226)中的规定项之后的下一项的数据项(224)的数据表示项(254) ,Element IastItemO ”,其返回表示数据项列表(226)中最后数据项(224)的数据表示项(254) ,Element itemFromKey(string key)”,其返回表示具有特定密钥的数据项(224)的数据表示项(254) ,Element itemFromPrefix(string prefix)”,其返回表示具有特定前缀或描述的数据项(224)的数据表示项(254);以及, “Element itemAtlndex (Integer index) ”,其返回表示具有特定索引的数据项(224)的数据表不项(254) ο对于这些方法中的每一个,所返回的项可为占位符(255)或数据表示项(254),取决于数据是否在调用时可用(例如,如果项再现器(240)已经被调用来用于该项,则可返回来自该调用的数据表示项(254)。将在下文中更详细地讨论占位符(255)的使用。5.元素通知处理程序接口和刷新操作
数据表示项(254)(或占位符(255))仅能用于表示数据项(224),只要数据表示项
(254)由项管理器(210)识别为如此。因此,可告知客户端(260)数据表示项的列表(256) 的这些变化。举例而言,如果占位符(255)响应于调用列举方法由项管理器(210)返回到客户端(260),且现所请求的数据表示项(254)可用(且已提取其所需的所有资源,如下文所讨论的那样),该方法能通过元素通知处理程序接口(272)调用以告知客户端(260)。下面为这种调用的伪代码的实例“void itemAvailable (Element item, Element placeholder) ”,其中“item”为数据表示项(254)(其可为到数据表示项的列表
(256)中的数据表示项(254)的指针),且“占位符”为由数据表示项的列表(256)中的数据表示项(254)(其也可为到占位符(255)的指针)替换。应当指出的是,这是单独于上文所讨论的itemsAvailable的方法。在数据表示项(254)和占位符(255)为用户接口元素的情况下,元素通知处理程序接口(272)能用传入的数据表示项(254)来替换用户接口中的占位符(255)。从这点开始,占位符(255)不能由项管理器(210)识别为有效项参数。当更新数据表示项时,项管理器(210)可发起刷新操作,刷新操作能生成变化通知集。为了开始刷新操作,能由项管理器(210)提取数据源(220)中的更新的数据集的更新表示。能通过比较更新表示与原始表示来生成变化通知集。变化通知集能表示得到始于原始表示的更新表示的可能变化集。可能的变化集可包括比替代变化集更少的变化,替代变化集将例如表示删除原始数据集中的所有项且在更新的数据集中插入所有项。变化通知集能经由元素通知处理程序接口(272)发送到客户端(260)。项管理器(210)能向客户端(260)呈现接口,该接口的表现如同数据源(220)提供同步变化通知,无论数据源(220)是否实际如此。这可以以将由项管理器(210)执行的三个主要步骤进行与数据源(220)中的数据项列表(226)相比,检测到当前本地数据表示 (250)过期,提取呈数据表示项(254)形式的更新表示来替换本地数据表示(250)的全部或部分,以及比较更新的本地数据表示(250)的原始版本和更新版本来生成变化通知。这些的每一个将在下文中讨论。a)检测过期本地数据表示
如果例如由客户端(260)请求刷新操作(即,提取呈数据表示项(254)形式的更新表示来替换所有或部分本地数据表示(250),且比较更新的本地数据表示(250)的原始版本和更新版本以生成变化通知),则可绕开对本地数据表示(250)是否过期的检测。客户端 (260)能经由项管理器接口(270)请求刷新操作,例如通过调用方法(例如,通过调用“void refreshO”)。举例而言,客户端(260)可被配置成周期性地请求刷新操作或者可由用户输入来请求刷新操作。此外,项管理器(210)或适配器(222)能自主发起刷新操作,例如当项管理器(210)或适配器(222)已检测到本地数据表示(250)过期时。举例而言,当客户端(260)请求附加数据表示项(254)时可检测到过期本地数据表示(250)。项管理器(210)可请求已经提取的本地数据表示(250)的重叠部分,作为请求由客户端(260)所请求的新数据项(224)的补充。项管理器(210)能在数据项批(224) 从数据源(220)到达时处理数据项批(224)。每次批到达时,项管理器(210)能比较与表示先前返回的数据项(224)的数据表示项(254)的重叠(若有的话)来检查一致性。举例而言,如果数据表示项K先前在项J之后,那么现在其在项H之后,那么某些事物变化,甚至客户端最近的请求仅为项K。如果对列表中的数据项(224)提供索引,那么数据项索引中的变化也可指示对数据项列表(226)中一个或多个其它数据项(224)的变化。项管理器(210)可以试图确定什么有变化且提取被确定为变化的新数据的子集。 可替换地,能由项管理器(210)来重新提取在本地数据表示(250)(其可为客户端(260)当前维护句柄到的所有数据表示项(254))中的所有数据表示项(254)。下文为此提取的讨论。b)提取更新的数据表示
当提取更新的数据表示为刷新操作的部分时,项管理器(210)可进入不同操作模式。 以此方式,项管理器(210)能忽略由于进入此模式之前发送的请求而到达的数据项(224)。 此外,虽然在此模式,项管理器(210)可与数据源(220)通信以提取数据批直到项管理器 (210)具有一致的“快照”为止,即,对应于原始本地数据表示(250)(即,已可用于项管理器(210)的本地数据表示)的数据源(220)中的数据部分的完整的更新的本地数据表示 (250)。能由项管理器(210)使用各种试探法来获得这种快照。在一个实施方式中,其可用于数据表示项的列表,可以进行以尽可能少的请求来重新获得实例化的子列表的尝试,且项管理器(210)能检查结果的每批请求以查看哪些仍需请求。在此方案中,如果对原始本地数据表示(250)中的数据表示项(254)的请求失败,则可认为该具体项被删除,但在发生这种失败之前或者该数据表示项(254)被成功地再提取,该项可认为是在刷新操作中仍待提取的项。如果项管理器(210)找到所接收的数据项(224)批之间的矛盾,则提取过程能重新开始且能再次请求在本地数据表示(250)中所有数据表示项(254)的数据项(224)。举例而言,如果在发送不同批的时间之间数据在数据源(220)中变化,可发生这种情况。虽然项管理器(210)处于其刷新模式,其能中止从数据源(220)请求新数据项 (224)。但是,项管理器(210)能通过响应于请求返回占位符(255)而继续处理来自客户端 (260)的请求。可替换地,如果这些请求的履行在执行刷新操作的过程中构成重要因素,则项管理器(210)可完成某些客户端请求。c)比较表示和生成变化通知
生成变化通知可以各种方式中的任何方式来进行。举例而言,变化通知集可表示在原始本地数据表示(250)中删除所有数据表示项(254)且将所有数据表示项(254)插入于更新的本地数据表示(250)中。但是这种变化通知集可不向客户端(260)提供足够的信息来以有帮助的方式向用户传达变化。可替换地,项管理器(210)能生成变化通知集,其表示似乎合理的变化集,即使数据源(220)中数据集变化的真实序列是项管理器(210)未知的。这可由项管理器(210)使用能减少由变化通知所表示的变化量的技术来进行,从而变化量小于其它可能的变化集, 例如如果变化包括在原始本地数据表示(250)中删除所有数据表示项(254)和将所有数据表示项(254)插入于更新的本地数据表示(250)中。客户端(260)能使用这种变化通知集来以各种方式向用户传达变化。举例而言,客户端(260)可提供动画来强调这些变化。此外,客户端(260)能以其它方式来传达变化。举例而言,如果发生于屏幕顶部显示的项示出数据表示项的列表(254)移动到数据源(220)中数据集的另一部分,那么客户端能让可见窗口滚动到其原始位置(且示出所有随后的数据表示项(254)),而不是使得窗口滚动刚好保持一项在屏眷顶部。下文为项管理器(210)能用于生成变化通知的技术的一种实施方式的描述。总之,此技术能逐渐地更改原始本地数据表示(250)直到其匹配更新的本地数据表示(250)。 此技术将参看图3来描述,其示出原始本地数据表示(310)的一部分的特定实例,所接收的在刷新操作中提取的更新数据项(320)和在已运行列表生成技术之后所得到的更新的本地数据表示(330)的部分。在图3中,项以其次序在表示中列出,其也可为项索引的次序,如所图示的那样。 在图3中,带问号的三角形示出占位符,带大写字母的三角形示出由客户端请求且实例化 (例如,再现为发送到客户端的Π描述)的数据表示项,且带字母的方框示出从数据源返回但未由客户端请求且仍未实例化的数据表示项。在问号或大些字母下方的数字指示在数据源中总数据集中的项的索引号。此外,大写字母能表示数据表示项的密钥。
原始数据表示(310)被图示为包括带索引85和86的两个占位符(表示由客户端请求但未由项管理器返回的项),之后为具有相应索引87、88、89和90的实例化数据表示项 D、E、F和G,且然后为具有相应索引91和92的未请求的数据项H和J。所接收的更新数据项(320)包括带相应索引86、87、88、89、90和91的项C、D、Q、G、E和R0能比较所接收的更新数据项(320)与原始本地数据表示(310)以生成将发送到客户端的变化通知。现将描述用于生成这些变化通知的技术。在该技术中,能找到在原始本地数据表示(310)中出现但未在接收的更新数据项 (320)中出现的项。对于这样的项能发送移除型变化通知且能移除这些项。举例而言,项 F的移除型通知能发送给客户端且项F能从本地数据表示移除。在此操作期间,可以限制对客户端的访问使得不允许客户端观察项上的索引,因为这样的索引可能不一致。可替换地,当做出可影响索引的其它变化时,如果索引变化且客户端被告知索引变化,则可允许客户端看到这样的索引。作为又一替代,可允许客户端观察索引,即使索引是不一致的。该技术还可包括找到由索引请求的针对项生成的占位符且使那些占位符与那些项匹配。举例而言,如果在原始本地数据表示中带索引85和86的占位符由索引请求,则这将包括使原始本地数据表示(310)中具有索引86的占位符与所接收的更新数据项(320) 中具有索引86的项C匹配。这能在移动数据表示中的占位符之前进行,以防止由索引请求的项的占位符移动,因为这种索引请求的占位符的移动能导致占位符与具有除所请求的索引之外的索引的项匹配。虽然在图3中未图示,所接收的更新数据项(320)可在多个非邻接范围上铺展。举例而言,由于可允许客户端保持到非邻接范围的句柄而发生这种情况,因此原始本地数据表示(310)可包括由客户端所请求的表示项的多个非邻接范围。此外,项管理器可仅请求在原始本地数据表示(310)中每个项周围有限的范围。该技术可包括确定所接收的更新数据项中每个范围的匹配。举例而言,匹配可包括在原始本地数据表示(310)中的范围,其与所接收的更新数据项(320)中的匹配范围共享最多的个别项。在某些情况下,在原始本地数据表示(310)中的范围可合并,如果合并的范围映射在所接收的更新的数据项(320)中的范围。在所接收的更新的数据项(320)中,能标记出每个范围的边界,在该边界外部所有项不出现在原始本地数据表示(310)中。举例而言,此可包括标记在所接收的更新数据项(320)中在项E与R之间和项C与D之间的边界。这些边界能区分简单看起来尚未观察到的项(例如,项C与R)与已插入到数据源中的数据集中的项(例如,项Q)。关于在所接收的更新的数据项(320)的每个范围中出现的项和其在原始本地数据表示中的匹配范围,能识别无需相对于彼此移动的项集且将其标记为静止的。这可进行使得这样的静止项的数量增加且因此能减小移动型变化通知的数量。例如,对于列表,此可包括分配序数给原始本地数据表示(310)中的项,且然后在所接收的更新的数据项集中找到这些序数中“最长的有序子序列”。举例而言,此可使用已知的“耐心分类(patience sorting)”技术的一部分来进行。在图3的图示实例中,此可导致识别D和G为静止的,其中G和G形成最长有序子序列。(或者,该技术能识别D和E为静止的,具有相同大小的有序子序列)。如果在上文所讨论的标记边界内存在占位符,则能基于在两个数据集中出现的近邻来尝试匹配这些占位符与在原始本地数据表示(310)中未出现的所接收的更新数据项 (320)中的项。举例而言,如果具有索引86的占位符并未已由于匹配索引值而与项C匹配, 则该占位符能与项C匹配,因为项C和占位符具有相同近邻(项D)。该技术可包括针对在所接收的更新数据项(320)和原始本地数据表示(310)中非静止的项发送移动型变化通知。该移动能在本地数据表示中执行。举例而言,此可包括发送项E的移动型通知且将项E移动到本地数据表示中的项G之后。当生成并发送这些通知时,能限制客户端的存取。举例而言,可允许客户端观察项的近邻,而不是项的索引。该技术还可包括找到在所接收的更新的数据项(320)中出现的新项,而不是原始本地数据表示(310)。这些新项能添加到本地数据表示且相对应的插入型变化通知能被发送到客户端。举例而言,在图3中,项Q能插入于项D之后且插入型变化通知能发送到客户端。如同移动,当执行插入时能限制客户端访问。举例而言,可允许客户端观察任何项的近邻,而不是项的索引。此外,该技术能包括比较出现于原始本地数据表示(310)和更新的本地数据表示 (330)中的项内容。对于内容已变化的项,这些项能在本地数据表示中更新且变化型变化通知能发送到客户端。同样,在此操作期间能限制客户端的访问使得能由客户端观察到除了索引之外的任何事物。该技术还可识别在原始本地数据表示(310)和更新的数据表示(330)中出现的索引已经变化的项。举例而言,在图3的实例中,能改变项E和G的索引且索引变化型变化通知能发送到客户端。在此操作期间,能限制客户端访问使得其能观察到变化项的新索引和旧索引,而不是其它索引。该技术也可包括匹配占位符,这些占位符尚未与项匹配且在所接收的更新数据项 (320)的标记的边界外部的项的原始本地数据表示(310)中的范围外围上。能基于它们所匹配的项或者其对于实例化的项或其它占位符的邻近性来更新来自原始本地数据表示 (310)的占位符的索引。在进行此操作之后,能移除对客户端访问的限制,且能允许客户端以客户端常用方式访问本地数据表示。与所接收的更新数据项(320)中的项匹配的占位符能利用在本地数据表示中的匹配项而实例化且能发送“item available (项可用)”通知。此外,如果在数据源中的数据集中的总项计数变化(根据关于从数据源发送到项管理器的总计数的信息或者数据源返回数据源列表中的最后数据项),那么计数变化型变化通知能发送到客户端以指示此变化。在图3的实例中,上文所讨论的刷新技术的操作能导致在图3顶部的原始本地数据表示(310)更新为在图3底部所图示的更新的本地数据表示(330),且变化通知适当地发送给客户端。可使用其它技术来以其它方式进行此操作,这些其它方式对于在该时间发送变化通知是符合逻辑的。举例而言在上文所讨论的技术中的操作次序能改变,只要它们仍导致可由客户端适当地处理的变化通知的有序生成。在完成了刷新操作之后,可重新开始对本地数据表示中仍存在占位符的请求的项的提取。这样的占位符可存在于原始本地数据表示(310)中和/或它们已在上文所讨论的刷新技术期间由于客户端对数据的请求而被插入。举例而言,在图3的实例中,此可导致提取对应于更新的本地数据表示(330)中占位符的项。因此,能适当地提取项,即使忽略刷新操作之前起始的对数据源请求的结果,以简化保持本地数据表示在刷新技术结束时一致。
6.列表编辑器接口和优化编辑
返回参看图2,如果数据源(220)和数据源适配器(222)实施一个或多个编辑方法,则能支持编辑。项管理器能覆盖这些方法中的每一个,因此,项管理器(210)能同步更新数据表示项的列表(256),由此允许同步地更新客户端(260)的用户接口,即使数据源(220)异步地执行由客户端(260)请求的更新。这些对数据表示项的列表的“优化”更新将通常为正确的(如果且当所请求的编辑在数据源(220)成功时优化更新将为正确的),且数据源 (220)能在后来的某时间悄悄更新数据项列表(226)而不需要对数据表示项的列表(256) 的进一步更新或对终端用户的视觉反馈。如果对数据项列表(226)的更新失败,那么项管理器(210)能向客户端(260)报告错误且恢复数据表示项的列表(256)以反映数据项列表(226)的实际状态。举例而言,这可包括撤销对数据表示项的列表(256)已做出的更新且告知客户端(260)更新已被撤销。 举例而言,项管理器(210)可告知客户端(260)所请求的更新不再有意义(如果其不再有意义,例如,由于另一用户对数据项列表(226)做出变化)或者不允许该更新(例如,因为正确许可并未准备好进行更新),且可撤销尚未做出的任何更新。但是,如果删除失败,项管理器(210)可不对齐更新队列,因为无论如何,另外的编辑通常并不指删除的项。而且,项管理器(210)可不撤销对“不再有意义的”失败的删除,因为无论如何,这种失败将指示已经删除了该项。在某些情况下,当更新数据项列表(226)的请求未决时,数据源(220)可变得不可用。在这样的情形下,项管理器(210)能保持已对数据表示项的列表(256)做出的优化更新,因为那些更新将仍可由数据源(220)来执行。但是,项管理器(210)可告知客户端(260) 数据源(220)是不可用的。在这样的情形下,客户端(260)可比通常情况更频繁请求刷新操作且可能不允许进一步编辑。应当指出,如果所请求的更新并不由数据源(220)执行,当执行下一刷新操作时,能使得本地数据表示项的列表(256)按照该数据项列表(226)。此外, 如果由客户端(260)所请求的更新中的某些在刷新操作之后不再有意义,那么当进行刷新操作时可由项管理器(210)告知客户端(260)。数据源适配器(222)能确定对于不再有意义的更新、不允许的更新和数据源不可用的情况何时发布代码。数据源适配器(222)能发送这些代码到项管理器(210)且项管理器能发送它们到客户端(260)。7.提取数据表示项的资源
在诸如HTML平台的某些配置中,项管理器(210)可依赖web浏览器机构来提取用于数据表示项(254)的资源(例如,用于数据表示项的图像等)。举例而言,该资源可包括与特定 HTML 标签相关联的资源,诸如 <img src= “ [URL],,>,〈iframe src= “ [URL],,>,〈script src= “[URL]” >,〈input type= “image” src= “[URL]” >,〈video poster= “[URL]” > 和 〈object data= “[URL] ”>,其中“[URL]”指该资源的均匀资源定位器。当数据表示项(254) 由项再现器(240)再现为DOM树时,在DOM树内参考的这些资源能进入到浏览器的提取队列内。如果客户端(260)向下滚动很多页,但当前在显示屏幕上可见的资源能首先提取,而不是等待于该队列后面。为了绕开在这样的情形中的浏览器逻辑,项管理器(210)能拖延调用项再现器(240)来再现数据表示项(254)直到资源队列仅具有条目的阈值数为止。举例而言,如果浏览器允许六个同时的连接,六可用作阈值。项管理器(210)能创建需要资源的用户接口元素的暂时副本且能将上传句柄附到这些元素上,因此项管理器(210)能知道何时已成功地提取资源。项管理器(210)能确定接下来再现哪个项(和因此提取该项的资源)。这种确定能使用项管理器(210)的内部逻辑且能依靠来自客户端(260)的优先级信息。举例而言, 客户端(260)能调用告知项管理器(210)哪些项是“高优先级”(诸如屏幕上的那些)和 “中优先级”(诸如刚好在屏幕下的那些)的方法,且项管理器(210)能假定其它项为“低优先级”。项管理器(210)能调动项再现器(240)以从最高到最低的此优先级次序来再现这些项。作为实例,控制(264)能通过项管理器接口(270)来调用方法,诸如通过做出能由以下伪代码表不的调用“void prioritize (Element first, Element last, Priority priority) ”,其中“Element first”和“Element last”为在项范围中的第一项和最后项, 且“Priority priority”指示该范围的优先级。8.数据表示项的返回占位符
如在上文中简要地讨论的那样,如果客户端(260)向项管理器(210)发送项管理器 (210)尚未从数据源(220)取回的项表示的请求,那么项管理器(210)能向客户端(260)返回占位符(255)直到项管理器(210)从数据源(220)成功地提取了相对应数据项(224)为止。项管理器(210)也可包括在本地数据表示(250)中的占位符(255),其中占位符(255) 能用于保持记录目的,诸如当相对应的数据项(224)从数据源(220)返回时与相对应的数据表示项(254)匹配。此外,客户端(260)可使用占位符(255)用于各种目的,诸如保持记录和代替实际数据表示项(254)显示直到返回了数据表示项(254)为止。在一个实施方式中,项管理器(210)能向客户端(260)暴露项管理器接口(270), 项管理器接口(270)能允许响应于来自客户端(260)的不同类型的请求以各种方式提取个别数据表示项(254),如上文所讨论的那样。如上文所讨论的那样,响应于对这些请求的方法中每一个的调用,项管理器(210)能作为项再现器(240)所生成的用户接口元素而返回所请求的数据表示项(254)。当调用这些项请求方法之一时,项管理器(210)能首先检查以确定项管理器 (210)是否已经具有在本地数据表示(250)中高速缓存的给定项的数据,其可在存储器中。 若如此,项管理器(210)可已调用项再现器(240),在此情况下,项管理器(210)能再次作为数据表示项(254)返回相同的用户接口元素,否则项管理器(210)能立即调用项再现器 (240)且返回实例化(例如,再现为能发送给客户端的Π描述)项给客户端(260)作为数据表不项(254) ο否则,项管理器(210)能在适配器(222)上调用适当方法,向适配器(222)传递适配器(222)能同步地或异步地调用的回调函数以返回所请求的数据项(224),如上文所讨论的那样。数据源(220)能快速地返回数据项(224)(诸如在数据源(220)为本地数据源的情况下)使得适配器(222)可以通过立即调回到项管理器(210)内(即通过同步地调用回调函数)而同步地报告所得到的数据项(224)。项管理器(210)能检测到何时发生这种同步回调。举例而言,项管理器(210)传递到适配器的回调能在为该项创建的隙数据结构中存储数据表示项(254)。如上文所讨论的那样,项管理器(210)能执行调用函数以调用到适配器内。在执行了调用函数之后,项管理器(210)可检查隙数据结构以查看数据表示项(254)或数据项(224)是否存储于那里。 若否,那么项管理器(210)能知道请求将异步完成且能创建占位符(255)。关于项的每个请求可再次做出这种确定或者可仅对于特定数据源(220)做出一次或仅周期性地做出确定。 可替换地,适配器(222)和/或数据源(220)可告知项管理器(210)数据源(220)是否能同步返回项。对数据源(220)或数据项组(224)的这种总体确定能认为是对于应用该确定的每个数据项(224)的确定。如果回调函数已同步回调,则项管理器(210)能调用项再现器(240)且向客户端 (260)返回实例化项作为数据表示项(254)。这可在不生成或提供占位符(255)的情况下进行。如果项管理器(210)并非已接收了所请求的数据项(224),且所请求的数据项将不同步返回,那么可使用异步调用来提取数据项(224)。为了避免对相同数据项(224)的冗余调用,当发起数据提取时,可以生成该提取的识别符且将其添加到散列表。预期由特定提取返回的数据项(224)的占位符(255)能添加到本地数据表示(250)中的隙且用此提取识别符标记。当提取完成时,无论成功还是失败,能从散列表移除其识别符。因此,当客户端(260)从异步返回相对应数据项(224)的数据源(220)请求尚未实例化的数据表示项(254)时,可存在至少三种子情况。首先,客户端(260)可已经请求了数据表示项(254),在此情况下,对于该项可已经存在占位符(255)且能返回该占位符 (255)。其次,客户端(260)能第一次请求数据表示项(254)且来自客户端(260)的请求能发起对数据源(220)的异步请求,也可生成新占位符(255)并返回。第三,客户端(260)能第一次请求数据表示项(254),但请求可使得相对应的请求不被发送到数据源(220)直到履行了对数据源(220)之前的请求(例如,项管理器(210)将提取在给定项之后相对应数据项(224),但该项本身仍仅为占位符(255));能创建并返回新占位符(255)并返回,且能等待提取发起直到适当时间为止。当数据项(224)从数据源(220)到达时,项管理器(210)能匹配数据项(224)与占位符且调用项再现器(240)用于现可实例化的任何数据项(224)。对于每个实例化,项管理器(210)可发送itemAvailable通知给客户端(260),向客户端(260)传递对现有用户接口元素的参考(占位符(255))和替换用户接口元素(数据表示项(254))。客户端(260) 能通过用数据表示项(254)替换占位符(255)来做出响应。这种替换能导致客户端(260) 用数据表示项(254)的呈现(例如显示)来替换占位符(255)的呈现(例如,显示)。项管理器(210)也可检验从数据源(220)接收回的结果邻近的占位符(255)且如果这些项尚未被请求,能发起相对应数据项(224)的新提取。项管理器(210)能试图减少到数据源(220)的网络往返次数,因此项管理器(210) 能计数相邻占位符(255)且分批请求数据项(224)。因此,来自项管理器(210)的一个请求可请求在来自客户端(260)的多个请求中所请求的数据项(224)。如果从数据源(220)接收回的数据项集(224)延伸超过当前占位符集(255),那么额外数据项(224)能存储于本地数据表示(250)中的隙中使得某些另外的请求可与表示那些高速缓冲的数据项(224)的数据表示项(254)同步履行。可允许数据源(220)返回比项管理器(210)所请求的更多或更少的项。上文所述的方案可允许这种情况,但可能由项管理器(210)发起某些不必要的提取。为了减少这种可能性,项管理器(210)可通常在进行下一请求之前等待返回自一个请求的数据项(224)。 这也可允许更多的数据项(224)由其密钥请求,而不是以其它方式,诸如仅以索引方式请求。举例而言,项管理器(210)可以此方式等待,只要请求是针对相邻的数据项(224)(且以某种方式来确定紧邻,诸如由返回的数据项阵列中的数据项(224)的相对定位)。在此情况下,例如,如果项管理器(210)接收密钥为“A”的数据项(224),那么项管理器(210)可请求密钥为“A”的数据项(以提供请求的某种重叠以例如检测是否在请求之间对数据源(220) 中的数据已做出变化)和下10个项。但项管理器(210)可选择不等待,如果一个请求和它后面的下一个请求正请求并不彼此相邻的数据项(224),因为然后对第一请求的响应将不可能包括将在下一请求中请求的数据项(224)。在某些情况下,客户端(260)和项管理器(210)可不知道在数据源(220)的数据集中的数据项总数。并非需要终端用户在显示任何占位符(255)之前等待网络往返来确定数据延伸,项管理器能“推测地”返回占位符(255)。换言之,项管理器(210)能返回这样的占位符(255),在确立计数之前,推测在数据源(220)的数据集中的项数量大于客户端(260)将请求的数量。在此推测证明是错误的情况下,可移除某些占位符(255),因为它们并不实际上对应于数据项(224)。项管理器(210)可向客户端(260)发送与在项实际上从数据集删除情况下项管理器(210)将发送的相同的“移除”通知。但是,为了给予客户端(260)显示此情形的不同动画的选项(例如,微微淡出而不是引人注目的飞走效果),可伴随该通知传递附加布尔参数(例如,名称为“幻想”的参数)。这种幻想参数可向客户端 (260)指示就项管理器(210)做出的确定而言,并不存在对应于相关联的占位符(255)的数据项(224)。这种幻想布尔可适用于其它情境,诸如当数据项(224)的两个非邻接的区域实例化为数据表示项(254)且扩展直到区域“冲突”为止,但在区域之间创建了太多占位符
(255)。通过组合项管理器(210)的占位符特征与占位符再现器(242)和项再现器(240) 的数据模板特征,能简化在客户端(260)与项管理器(210)之间的编程接口,因为客户端 (260)和项管理器(210)能操作,而无需单独句柄来跟踪身份。替代地,项管理器(210)能向客户端(260)传递对占位符(255)的参考和对所请求的数据表示项(254)的参考,指示客户端(260)用数据表示项(254)(例如,利用itemAvailable通知)来替换占位符(255)。 客户端(260)能在客户端(260)的用户接口数据结构(例如,DOM树)中的适当位置无条件地插入由调用请求方法之一返回的值(数据表示项(254)和/或占位符(255))且随后在由项管理器(210)通知这样做时换出任何占位符(255)。因此,客户端(260)能与项管理器(210)交互,如同客户端(260)与同步数据源交互,无论实际数据源(220)能否对数据请求提供同步响应。在替代设计中,项管理器(210)(而不是客户端(260))能维护用户接口数据结构。 举例而言,在用户接口数据结构为DOM树的情况下,客户端(260)能接收数据表示项(254) 作为DOM元素且能假定DOM元素具有对应于DOM元素下方完整列表中的项的子级。客户端 (260)能使用项管理器(210)而不是DOM接口来从一个子级导航到下一个子级。项管理器 (210)可包括占位符(255)且能用DOM树本身中的数据表示项(254)来替换它们。以此方式,项管理器(210)能沿着子级前后导航,且能用占位符(255)且在随后数据表示项(254) 变得可用时用数据表示项(254)更新子级。环境(200)也可包括用于保持记录的一个或多个数据结构,诸如用于跟踪在数据表示项(254)的列表中一个或多个位置的数据结构。III.数据项管理器技术现将讨论若干数据项管理器。这些技术中每一个能在计算环境中执行。举例而言,每个技术可在计算机系统中执行,计算机系统包括至少一个处理器和至少一个存储器,存储器包括存储于其上的指令,这些指令当由至少一个处理器执行时执行技术(一个或多个存储器存储指令(例如,对象代码)且当处理器(一个或多个)执行那些指令时,处理器(一个或多个)执行技术)。相似地,一个或多个计算机可读存储介质可具有实施于其上的计算机可执行的指令,其当由至少一个处理器执行时造成至少一个处理器执行该技术。参看图4,将描述数据项管理器技术。在该技术中,项管理器能经由数据源适配器从数据源请求(410)数据项且能经由数据源适配器从数据源接收回(420)数据项。此外, 项管理器能维护(430)表示从数据源接收的表示数据项的数据表示项的列表且能向客户端提供(440)贯穿数据表示项的列表的列举。数据表示项可为用户接口元素,且维护(430)数据表示项的列表还可包括调动再现器来再现来自从数据源接收的数据项的用户接口元素。维护(430)列表还可包括在该列表中包括用户接口元素。向客户端提供(440)贯穿该列表的列举包括对于数据表示项中的至少一个,请求用于数据表示项的资源,等待资源加载,且在资源加载之后向客户端提供数据表示项。维护(430)数据表示项的列表还可包括从客户端接收数据表示项中一个或多个的一个或多个优先级指定,且以由优先级指定(一个或多个)规定的顺序加载数据表示项的列表的资源。维护(430)数据表示列表可包括使得该列表中数据表示项状态脱水。举例而言, 可响应于用户输入做出状态变化,其能通过存储于特定位置,诸如存储于存储器和/或长期存储设备中而脱水。该状态能表示数据表示项的变化,诸如响应于用户输入的变化。项管理器能从列表移除数据表示(例如,通过删除该表示和/或从存储器移除整个列表)且能在后来将数据表示项重新插回到列表内。项管理器能将该状态再水合回到数据表示项内。 这可在数据表示项重新插入到列表内之前或之后进行。以此方式,能维护对数据表示项的变化。举例而言,可维护响应于用户输入对数据表示做出的用户接口变化,即使在从数据表示项的列表删除数据表示项且随后再插入到数据表示项的列表中的情况下。水合可允许以降低的存储成本来维护用户输入变化,因为能丢弃用户接口数据结构的方面,且如果它们随后使用,能重新创建那些方面。此外,水合可允许将状态转变成能序列化用于长期存储的形式,诸如不包括指针的形式,指针仅在存储器中用户接口数据结构当前形式中有意义。项管理器可通过第一接口与客户端交互,且可通过第二接口与数据源适配器交互。项管理器也可分别通过第三接口和第四接口与项再现器和占位符再现器交互。项管理器可从数据源异步接收(420)数据项且向客户端提供(440)贯穿数据表示项的列表的列举可包括向客户端提供贯穿数据表示项的列表的同步列举。举例而言,向客户端提供此同步列举可包括向客户端提供一个或多个占位符,同时等待对应于占位符(一个或多个)的一个或多个数据表示项变得对于项管理器可用。此外,向客户端提供同步列举可包括当对应于占位符(一个或多个)的数据表示项(一个或多个)变得可用时,将这些数据表示项(一个或多个)提供给客户端且指示客户端用数据表示项(一个或多个)来替换占位符(一个或多个)。图4的技术还可包括项管理器向客户端提供(450)数据表示项的列表的变化通知。项管理器也可通过比较包括一个或多个数据表示项的第一数据表示与包括一个或多个数据表示项的第二数据表示来生成变化通知。维护(430)数据表示项的列表可包括从客户端接收一个或多个请求集以对数据表示项的列表做出一个或多个编辑。项管理器可发送请求(一个或多个)到数据源以对由数据表示项所表示的数据项列表做出编辑(一个或多个)。项管理器能对数据表示项的列表做出编辑(一个或多个)且通知客户端已做出编辑(一个或多个),而无需等待数据源对请求 (一个或多个)做出响应。如果数据源完成了对数据项列表的编辑(一个或多个),则能保持对数据表示项的列表的编辑。如果数据源对数据项列表的编辑失败,能撤销对数据表示项的列表的编辑。维护(430)数据表示项的列表可包括从数据源请求多个数据项且响应地从数据源接收回不同数量的数据项(多于或少于所请求的数量)。项管理器也可利用表示从数据源接收回的不同数量的数据项的数据表示项来更新数据表示项的列表。维护(430)数据表示项的列表可包括从数据源处的数据项列表请求数据项子集, 其中子集彼此重叠。项管理器能使用选自由数据项索引、数据项密钥和数据项索引和数据项密钥组合构成的识别符来识别从数据源请求的项。数据表示项的列表可表示在数据源处数据项列表的一部分。维护(430)数据表示项的列表可包括在数据表示项由客户端请求时从数据项列表提取附加的数据项且释放不再由客户端使用的数据表示项。图4的技术还可包括项管理器向客户端提供(460)在数据源处的数据项列表的项计数。参看图5,将描述另一数据项管理器技术。该技术可包括项管理器经由数据源适配器从数据源请求(510)数据项且经由数据源适配器从数据源接收回(520)数据项。数据项管理器可维护(530)表示从数据源接收的数据表示项的列表,其中数据表示项包括用户接口元素。维护(530)该列表可包括调动(532)再现器来再现来自从数据源接收的数据项的数据表示项且在该列表中包括(534)这些数据表示项。此外,维护(530)列表还可包括从客户端接收数据表示项中一个或多个的一个或多个优先级指定,且以由优先级(一个或多个)指定所规定的顺序加载用于数据表示项的资源。项管理器可也向客户端提供(540) 贯穿数据表示项的列表的列举。参看图6,将描述又一数据项管理器技术。图6的技术可以包括经由数据源适配器从数据源请求(610)数据项,且对数据源的请求通过在项管理器与数据源适配器之间的接口做出。该技术也可包括经由数据源适配器从数据源接收(620)数据项。可维护(630)表示从数据源接收的数据项的数据表示项的列表,其中数据表示项可包括用户接口元素。维护(630)该列表可包括调动¢32)再现器来再现来自从数据源接收的数据项的数据表示项且在该列表中包括(634)数据表示项。可通过在项管理器与再现器之间的接口来调动 (632)再现器。举例而言,再现器可为由项管理器调用的函数。图6的技术还可包括向客户端提供(640)贯穿数据表示项的列表的列举,该列举通过在项管理器与客户端之间的接口提供。向客户端提供¢40)列举可包括向客户端提供(642) —个或多个占位符,同时等待对应于占位符(一个或多个)的一个或多个数据表示项变得对于项管理器可用。当对应于占位符(一个或多个)的数据表示项(一个或多个)变得对于项管理器可用时,那么项管理器可向客户端提供(644)数据表示项(一个或多个)且指示(646)客户端用数据表示项(一个或多个)来替换占位符(一个或多个)。图6的技术还可包括向客户端提供(650)数据表示项的列表的变化通知。维护(630)数据表示项的列表可包括从客户端接收对数据表示项的列表做出一个或多个编辑的一个或多个请求集;向数据源发送对由数据表示项所表示的数据项列表做出编辑(一个或多个)的一个或多个请求;对数据表示项的列表做出编辑(一个或多个)且告知客户端已经做出编辑(一个或多个),无需等待数据源对数据源的请求做出响应;确定数据源是否完成了对数据项列表的编辑(一个或多个);如果项管理器确定数据源完成了对数据项列表的编辑(一个或多个),那么保持对数据表示项的列表的编辑(一个或多个);以及如果项管理器确定数据源对完成数据项列表的编辑(一个或多个)失败,那么撤销对数据表示项的列表的编辑(一个或多个)。尽管已经以特定于结构特征和/或方法行为的语言描述了本主题,应了解,在所附权利要求中所限定的主题不必限于上文所述的具体特征或行为。而是,上文所述的具体特征和行为公开为实施权利要求的实例形式。
权利要求
1.一种计算机实施的方法,包括项管理器经由数据源适配器从数据源请求数据项;所述项管理器经由所述数据源适配器从所述数据源接收数据项;所述项管理器维护表示从所述数据源接收的数据项的数据表示项的列表;以及所述项管理器向客户端提供贯穿数据表示项的列表的列举。
2.根据权利要求I所述的方法,其中维护所述数据表示项的列表包括使所述列表中的数据表示项的状态脱水,所述状态表示响应于用户输入所述数据表示项的变化;从所述列表移除所述数据表示项;将所述数据表示项重新插回到所述列表内;以及将所述状态再水合到所述数据表示项内。
3.根据权利要求I所述的方法,其中维护所述数据表示项的列表包括从所述客户端接收所述数据表示项中一个或多个的一个或多个优先级指定;以及以所述一个或多个优先级指定规定的顺序加载所述数据表示项的资源。
4.根据权利要求I所述的方法,其中所述方法还包括项管理器向所述客户端提供数据表示项的列表变化的通知,且其中所述项管理器通过比较包括一个或多个数据表示项的第一数据表示与包括一个或多个数据表示项的第二数据表示来生成变化通知。
5.根据权利要求I所述的方法,其中维护所述数据表示项的列表包括从所述客户端接收对所述数据表示项的列表做出一个或多个编辑的一个或多个请求集合;向所述数据源发送对由所述数据表示项所表示的数据项列表做出一个或多个编辑的一个或多个请求;对所述数据表示项的列表做出一个或多个编辑且告知所述客户端已做出了所述一个或多个编辑,而无需等待所述数据源对所述一个或多个请求做出响应;如果所述项管理器确定所述数据源完成了对所述数据项列表的一个或多个编辑,那么保持对所述数据表示项的列表的编辑;以及如果项管理器确定所述数据源未能完成对所述数据项列表的所述一个或多个编辑,那么撤销对所述数据表示项的列表的一个或多个编辑。
6.根据权利要求I所述的方法,其中维护所述数据表示项的列表包括请求来自所述数据源的多个数据项;响应地从所述数据源接收回不同数量的数据项;以及用表示从所述数据源接收回的数据项的不同数量的数据表示项来更新所述数据表示项的列表。
7.根据权利要求I所述的方法,其中维护所述数据表示项的列表包括从所述数据源处的数据项列表请求数据项子集,所述子集彼此重叠。
8.根据权利要求I所述的方法,其中所述数据表示项的列表表示在所述数据源处的数据项列表的一部分且维护所述数据表示项的列表包括在所述客户端请求数据表示项时,从所述数据项列表提取附加数据项;以及释放不再由所述客户端使用的数据表示项。
9.一种计算机实施的方法,包括经由数据源适配器从数据源请求数据项,对所述数据项的请求通过在项管理器与所述数据源适配器之间的接口做出;经由所述数据源适配器从所述数据源接收数据项;维护表示从所述数据源接收的数据项的数据表示项的列表;所述数据表示项包括用户接口元素,且维护所述列表包括调动再现器来再现来自从所述数据源接收的所述数据项的数据表示项,通过在所述项管理器与所述再现器之间的接口来调动所述再现器;以及将所述数据表示项包括在所述列表中;以及向客户端提供贯穿数据表示项的列表的列举,通过在所述项管理器与所述客户端之间的接口来提供所述列举,并向所述客户端提供所述列举包括向所述客户端提供一个或多个占位符,同时等待对应于所述一个或多个占位符的一个或多个数据表示项变得对于所述项管理器可用;以及当对应于所述一个或多个占位符的所述一个或多个数据表示项变得对于所述项管理器可用时,然后向所述客户端提供一个或多个数据表示项且指导所述客户端用所述一个或多个数据表示项替换所述一个或多个占位符;以及向所述客户端提供所述数据表示项的列表变化的通知。
10.一个或多个计算机可读存储介质,其具有实施于其上的计算机可执行指令,当由至少一个处理器执行时,所述指令使所述至少一个处理器执行如权利要求1-9中任一项所述的方法。
11.一种计算机系统,包括至少一个处理器;以及至少一个存储器,其包括存储于其上的指令,当由所述至少一个处理器执行时,所述指令使得所述至少一个处理器调动项管理器来执行包括以下的行为经由数据源适配器从数据源请求数据项;经由所述数据源适配器从所述数据源接收数据项;维护表示从所述数据源接收的数据项的数据表示项的列表,所述数据表示项包括用户接口元素,以及维护所述列表包括调动再现器来再现来自从所述数据源接收的所述数据项的数据表示项;以及将所述数据表示项包括在所述列表中;以及向客户端提供贯穿所述数据表示项的列表的列举。
全文摘要
项管理器可经由数据源适配器从数据源请求和接收数据项。项管理器也可维护表示数据项的数据表示项的列表。数据表示项可包括用户接口元素。而且,维护该列表可包括调动再现器来再现来自从数据源接收的数据项的数据表示项,且在该列表中包括数据表示项。项管理器可向客户端提供贯穿数据表示项的列表的列举。项管理器也可包括提供其它特征,诸如向客户端提供数据表示项的列表变化的通知。
文档编号G06F9/46GK102591716SQ201210018558
公开日2012年7月18日 申请日期2012年1月20日 优先权日2011年1月21日
发明者A.S.沙, M.A.内尔特, N.布伦, P.A.古斯莫里诺, P.J.奎亚特科夫斯基, S.A.范内斯 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1