国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      數(shù)據(jù)項管理器的制作方法

      文檔序號:6363663閱讀:188來源:國知局
      專利名稱:數(shù)據(jù)項管理器的制作方法
      數(shù)據(jù)項管理器
      背景技術(shù)
      應用(application)和/或控制(control)可充當本地和/或遠程數(shù)據(jù)源的客戶端以顯示來自這些數(shù)據(jù)源的項列表。如本文所用的,列表為項的有序的序列且客戶端可為應用和/或控制。使用許多不同接口或協(xié)議之一從每個數(shù)據(jù)源獲得數(shù)據(jù),且利用用戶接口呈現(xiàn)給終端用戶以便導航且可能修改列表。取決于數(shù)據(jù)源,可使用項在列表中的索引和/ 或使用“密鑰”來提取項,“密鑰”對于每個項不同且對于該項而言是不變的。某些數(shù)據(jù)源, 諸如本地數(shù)據(jù)源,能對于數(shù)據(jù)的請求同步響應,且數(shù)據(jù)源將請求的數(shù)據(jù)傳遞到項管理器,之后項管理器重新開始執(zhí)行。這種對數(shù)據(jù)請求的響應通?;ㄙM比某響應時間閾值更少的時間,所述響應時間閾值例如是足夠低的閾值,使得響應的呈現(xiàn)可以顯得與相對應的請求實時。舉例而言,這樣的響應可用大約數(shù)十毫秒或更短。其它數(shù)據(jù)源,諸如遠程數(shù)據(jù)源,可異步響應,且在請求后,項管理器重新開始執(zhí)行且在后來的時間從數(shù)據(jù)源接收請求的數(shù)據(jù)。這種對數(shù)據(jù)請求的響應通常花費比上文所討論的響應時間閾值更多的時間。當對列表中的數(shù)據(jù)做出變化時,數(shù)據(jù)源可或可不向應用生成通知。舉例而言,web服務器通常并不在數(shù)據(jù)變化時向客戶端提供變化通知。

      發(fā)明內(nèi)容
      所描述的實施例包括在本文中被稱作項管理器的模塊,其能與數(shù)據(jù)源經(jīng)由在本文被稱作數(shù)據(jù)源適配器的另一模塊交互,且也能與客戶端交互以提供表示來自數(shù)據(jù)源的數(shù)據(jù)項的數(shù)據(jù)表示項的列表。如本文所用的,數(shù)據(jù)項為由數(shù)據(jù)源提供的項。數(shù)據(jù)項可為與在數(shù)據(jù)源中存儲相對應數(shù)據(jù)項的格式相同或不同的格式。數(shù)據(jù)表示項為數(shù)據(jù)項的表示且數(shù)據(jù)表示項可為與由數(shù)據(jù)表示項所表示的數(shù)據(jù)項相同或不同的格式。在一個實施例中,工具和技術(shù)可包括項管理器,項管理器經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求數(shù)據(jù)項且經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源接收數(shù)據(jù)項。項管理器也可維護表示從數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項的列表。此外,項管理器可向客戶端提供貫穿數(shù)據(jù)表示項的列表的列舉。項管理器也可向客戶端提供數(shù)據(jù)表示項的列表變化的通知。在另一實施例中,項管理器可經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求和接收數(shù)據(jù)項。項管理器也可維護表示從數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項的列表。數(shù)據(jù)表示項可包括用戶接口元素。而且,維護該列表可包括調(diào)動再現(xiàn)器來再現(xiàn)來自從數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項且在該列表中包括數(shù)據(jù)表示項。項管理器可向客戶端提供貫穿數(shù)據(jù)表示項的列表的列舉。提供本發(fā)明內(nèi)容以便以簡化的形式介紹概念的選擇。這些概念在具體實施方式
      中進一步展開描述。此發(fā)明內(nèi)容不預期標識所要求保護的主題的關(guān)鍵特征或必要特征,也不預期用于限制所要求保護的主題的范圍。類似地,本發(fā)明不限于解決背景技術(shù)具體實施方式
      和附圖中討論的特定技術(shù)、工具、環(huán)境、缺點或優(yōu)點的實施方式。


      圖I為其中可實施所描述的實施例中的一個或多個的合適計算環(huán)境的方塊圖。圖2為數(shù)據(jù)項管理器系統(tǒng)或環(huán)境的示意圖。圖3為原始本地數(shù)據(jù)表示的一部分、所接收的以刷新操作提取的更新的數(shù)據(jù)項列表和在運行列表生成技術(shù)之后所得到的更新的本地數(shù)據(jù)表示的部分的示意圖。圖4為數(shù)據(jù)項管理器技術(shù)的流程圖。圖5為另一數(shù)據(jù)項管理器技術(shù)的流程圖。圖6為又一數(shù)據(jù)項管理器技術(shù)的流程圖。
      具體實施例方式本文所述的實施例針對于用于改進客戶端的數(shù)據(jù)表示項的列表的處置的技術(shù)和工具??赏ㄟ^單獨地或組合地使用各種技術(shù)和工具得到這些改進。這樣的技術(shù)和工具可包括項管理器,項管理器能通過數(shù)據(jù)源適配器與數(shù)據(jù)源接口從而獲得數(shù)據(jù)項。項管理器也可與客戶端接口以向客戶端提供貫穿表示數(shù)據(jù)項的數(shù)據(jù)表示項的列表的列舉。項管理器可提供本文所討論的特征中的一個或多個特征。舉例而言,數(shù)據(jù)表示項可為表示數(shù)據(jù)項的用戶接口元素。項管理器可支持數(shù)據(jù)表示項的列表的同步列舉,即使在數(shù)據(jù)表示項表示來自異步數(shù)據(jù)源的數(shù)據(jù)項時。舉例而言,這可使用占位符來進行,如將在下文中所討論的那樣。如本文所用的,占位符為代替所請求的數(shù)據(jù)表示項返回到客戶端的對象。占位符可呈各種形式中的任何形式。舉例而言,占位符(一個或多個)和在項管理器所維護的高速緩存中的實際數(shù)據(jù)表示項可呈再現(xiàn)的用戶接口元素的形式??商鎿Q地,占位符和/或數(shù)據(jù)表示項可呈某些其它形式,諸如呈不透明句柄(opaque handle)或某些其它數(shù)據(jù)類型的形式。此外,在由項管理器所用的本地數(shù)據(jù)表示中的占位符可呈與響應于來自客戶端的請求而返回到客戶端的占位符不同的形式。項管理器也可向客戶端提供數(shù)據(jù)表示項變化的通知,即使在項管理器與不提供針對表示的數(shù)據(jù)項的這種通知的數(shù)據(jù)源接口時。項管理器也可允許加載待優(yōu)先化的數(shù)據(jù)表示項的資源,且也可延遲向客戶端提供數(shù)據(jù)表示項直到已加載了該數(shù)據(jù)表示項的資源為止。 此外,項管理器可提供數(shù)據(jù)表示項的同步更新,即使是對于異步數(shù)據(jù)源。項管理器可向客戶端提供數(shù)據(jù)的自相一致的快照(例如,無重復索引),即使是對于可快速變化的異步數(shù)據(jù)源。項管理器也可包括一個或多個特征來改進較差網(wǎng)絡連接和其它故障的耐受性。項管理器可與數(shù)據(jù)源適配器接口以允許數(shù)據(jù)源返回比項管理器所請求的更少或更多項。而且,項管理器可請求數(shù)據(jù)表示項的列表的重疊子集。該重疊可由項管理器用于記住在列表中的定位而無需數(shù)據(jù)源維護光標,且其也可由項管理器用于檢測列表變化。項管理器可與數(shù)據(jù)源接口,無論數(shù)據(jù)源是否支持到數(shù)據(jù)源的數(shù)據(jù)項列表內(nèi)的索引和/或允許使用“密鑰”提取項,“密鑰”對于每個數(shù)據(jù)項不同且對于該項而言是不變的。 項管理器也可提供數(shù)據(jù)虛擬化,其可以包括在數(shù)據(jù)項由客戶端請求時和通過釋放不再由客戶端使用的數(shù)據(jù)表示項來提取所述數(shù)據(jù)項。這可減小用于維護數(shù)據(jù)表示項的列表的帶寬和存儲。此外,項管理器可對數(shù)據(jù)表示項的用戶修改的狀態(tài)實施水合(hydration)(脫水 (dehydration)和再水合(rehydration))。舉例而言,狀態(tài)可為響應于用戶輸入所做出的變化,用戶輸入能通過存儲于特定位置,諸如存儲于存儲器和/或長期存儲設備中而脫水。該狀態(tài)能表示數(shù)據(jù)表示項的變化,諸如響應于用戶輸入的變化。項管理器能從列表移除數(shù)據(jù)表示(例如,通過刪除該表示和/或從存儲器移除整個列表),且能在后來將數(shù)據(jù)表示項重新插回到列表內(nèi)。項管理器能將該狀態(tài)再水合回到數(shù)據(jù)表示項內(nèi)。這可在數(shù)據(jù)表示項重新插入到列表內(nèi)之前或之后進行。或者,項管理器可提供通知來允許客戶端執(zhí)行狀態(tài)的脫水和再水合。在所附權(quán)利要求中所限定的主題不必限于本文所述的益處。本發(fā)明的特定實施方式可提供本文所述益處中的所有益處、某些益處或不提供任何本文所述的益處。盡管為了呈現(xiàn)起見,各種技術(shù)的操作在本文中以特定順序次序描述,但應了解這種描述方式涵蓋操作次序的重新布置,除非需要特定排序。舉例而言,順序描述的操作可在某些情況下重新布置或同時執(zhí)行。此外,為了簡單起見,流程圖可不示出其中可結(jié)合其它技術(shù)使用的特定技術(shù)的各種方式。本文所述的技術(shù)可結(jié)合本文所述的系統(tǒng)中的一個或多個和/或結(jié)合一個或多個其它系統(tǒng)使用。舉例而言,本文所述的各種過程可利用硬件或軟件或二者的組合來實施。舉例而言,能構(gòu)想到專用的硬件實施,諸如專用集成電路、可編程的邏輯陣列和其它硬件設備來實施本文所述技術(shù)中的一個或多個的至少一部分??砂ǜ鞣N實施例的設備和系統(tǒng)的應用能廣泛地包括多種電子和計算機系統(tǒng)??墒褂脙蓚€或更多特別互連的硬件模塊或設備來實施技術(shù),所述特別互連的硬件模塊或設備具有可以在模塊之間以及通過模塊傳送的控制和數(shù)據(jù)信號,或者作為專用集成電路的部分。此外,本文所述的技術(shù)可由計算機系統(tǒng)可執(zhí)行的軟件程序來實施。舉例而言,實施方式可包括分布式處理、組件/對象分布式處理和并行處理。而且,能構(gòu)想虛擬計算機系統(tǒng)處理來實施如本文所述的技術(shù)和功能中的一個或多個。I.示范性計算環(huán)境
      圖I示出其中可實施所描述的實施例中的一個或多個的合適計算環(huán)境(100)的一般化實例。舉例而言,一個或多個這樣的計算環(huán)境可用作如本文所討論的客戶端、項管理器、 數(shù)據(jù)源適配器和/或數(shù)據(jù)源的環(huán)境。一般而言,能使用各種不同的通用或?qū)S糜嬎阆到y(tǒng)配置??蛇m于結(jié)合本文所述的工具和技術(shù)使用的熟知計算系統(tǒng)配置的實例包括但不限于服務器場和服務器集群、個人計算機、服務器計算機、手持或膝上型設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程的消費電子器件、網(wǎng)絡PC、微型計算機、大型計算機、包括上述系統(tǒng)或設備中的任一個的分布式計算環(huán)境等。計算環(huán)境(100)不預期暗示對于本發(fā)明的用途或功能范圍的任何限制,因為本發(fā)明可在多種通用或?qū)S糜嬎悱h(huán)境中實施。參看圖1,計算環(huán)境(100)包括至少一個處理單元(110)和至少一個存儲器
      (120)。在圖I中,這種最基本的配置(130)包括于虛線中。處理單元(110)執(zhí)行計算機可執(zhí)行的指令且可為真實的或虛擬的處理器。在多處理系統(tǒng)中,多個處理單元執(zhí)行計算機可執(zhí)行的指令以增強處理能力。至少一個存儲器(120)可為易失性存儲器(例如,寄存器、高速緩存、RAM)、非易失性存儲器(例如,ROM、EEPR0M、閃存)或這兩個的某種組合。至少一個存儲器(120)存儲實施數(shù)據(jù)項管理器的軟件(180)。盡管為了清楚起見,圖I的各個方塊以線示出,實際上描寫的各種組件并非如此清晰且象征性地,下文所討論的圖I和其它附圖中的線將更準確地為灰色的且模糊的。舉例而言,可考慮諸如顯示設備的呈現(xiàn)組件為I/o組件。而且,處理器具有存儲器。本發(fā)明人認識到這是該技術(shù)的性質(zhì)且重申圖I的示意圖只是說明可結(jié)合本發(fā)明的一個或多個實施例使用的示例性計算設備。在諸如“工作站”、“服務器”、“膝上型計算機”、“手持設備”等類別之間并無區(qū)別,因為這些全都在圖I的范圍中設想到且指“計算機”、“計算環(huán)境”或“計算設備”。計算環(huán)境(100)可具有附加特征。在圖I中,計算環(huán)境(100)包括存儲設備(140), 一個或多個輸入設備(150)、一個或多個輸出設備(160)和一個或多個通信連接(170)。諸如總線、控制器或網(wǎng)絡這樣的互連機構(gòu)(未圖示)使得計算環(huán)境(100)的各組件互連。通常,操作系統(tǒng)軟件(未圖示)提供用于在計算環(huán)境(100)中執(zhí)行的其它軟件的操作環(huán)境且協(xié)調(diào)計算環(huán)境(100)的組件的活動。存儲設備(140)可為可移除的或不可移除的,且可包括計算機可讀的存儲介質(zhì), 諸如磁盤、磁帶或磁盒、CD-ROM、CD-RW、DVD或任何其它介質(zhì),其可用于存儲信息且其可在計算環(huán)境(100)內(nèi)被存取。存儲設備(140)存儲用于軟件(180)的指令。輸入設備(一個或多個)(150)可為觸摸輸入設備,諸如鍵盤、鼠標、鋼筆或跟蹤球; 語音輸入設備;掃描設備;網(wǎng)絡適配器;CD/DVD讀取器;或提供輸入到計算環(huán)境(100)的另一個設備。輸出設備(一個或多個)(160)可為顯不器、打印機、揚聲器、⑶/DVD刻錄機、網(wǎng)絡適配器或提供來自計算環(huán)境(100)的輸出的另一設備。通信連接(一個或多個)(170)允許經(jīng)過通信介質(zhì)與另一計算實體通信。因此,計算環(huán)境(100)可使用到諸如個人計算機、服務器、路由器、網(wǎng)絡PC、對等設備或另一公共網(wǎng)絡節(jié)點的一個或多個遠程計算設備的邏輯連接而操作于網(wǎng)絡化環(huán)境中。通信介質(zhì)以調(diào)制數(shù)據(jù)信號傳達諸如數(shù)據(jù)或計算機可執(zhí)行的指令或請求的信息。經(jīng)調(diào)制的數(shù)據(jù)信號為其特征中一個或多個特征被設置或改變?yōu)槭沟迷谛盘栔芯幋a信息的信號。舉例而言且并無限制意義, 通信介質(zhì)包括利用電、光學、RF、紅外、聲的或其它載波實施的有線或無線技術(shù)。工具和技術(shù)可在計算機可讀介質(zhì)的一般情形下描述,其可為存儲介質(zhì)或通信介質(zhì)。計算機可讀存儲介質(zhì)為能在計算環(huán)境內(nèi)存取的任何可用存儲介質(zhì),但術(shù)語計算機可讀存儲介質(zhì)并不指信號本身。舉例而言且并無限制意義,對于計算環(huán)境(100),計算機可讀存儲介質(zhì)包括存儲器(120)、存儲設備(140)和上述組合。工具和技術(shù)能在計算機可執(zhí)行的指令的一般情形下描述,諸如包括于程序模塊中,在目標真實或虛擬處理器上的計算環(huán)境中執(zhí)行的那些。一般而言,程序模塊包括例程、 程序、庫、對象、類,組件、數(shù)據(jù)結(jié)構(gòu)等,其執(zhí)行特定任務或?qū)嵤┨囟ǔ橄髷?shù)據(jù)類型。程序模塊的功能在各個實施例中可根據(jù)需要在程序模塊之間組合或拆分。用于程序模塊的計算機可執(zhí)行的指令可在本地或分布式計算環(huán)境內(nèi)執(zhí)行。在分布式計算環(huán)境中,程序模塊可位于本地和遠程計算機存儲介質(zhì)中。為了呈現(xiàn)起見,詳細描述使用如“確定”、“選擇”、“請求”和“接收”這樣的術(shù)語來描述在計算環(huán)境中的計算機操作。這些和其它類似術(shù)語為由計算機執(zhí)行的操作的高層次抽象,且不應與人執(zhí)行的行為混淆,除非明確地指出了由人(諸如“用戶”)執(zhí)行行為。對應于這些術(shù)語的實際計算機操作取決于實施方式而變化。II.數(shù)據(jù)項管理系統(tǒng)和環(huán)境
      圖2為數(shù)據(jù)項管理器系統(tǒng)或環(huán)境(200)的示意圖,結(jié)合數(shù)據(jù)項管理器系統(tǒng)或環(huán)境(200) 可實施所描述的實施例中的一個或多個。現(xiàn)將提供環(huán)境(200)的概要,之后為環(huán)境(200)的更詳細描述。A.數(shù)據(jù)項管理器環(huán)境的概要
      環(huán)境(200)可包括項管理器(210),項管理器(210)能被配置成通過數(shù)據(jù)源適配器 (222)與數(shù)據(jù)源(220)交互。數(shù)據(jù)源適配器(222)能具體地被配置成與特定類型的數(shù)據(jù)源 (220)或甚至數(shù)據(jù)源(220)的特定實例交互。數(shù)據(jù)源(220)能管理數(shù)據(jù)項列表(226)中的數(shù)據(jù)項(224)。項管理器(210)能調(diào)用數(shù)據(jù)源接口(230),通過數(shù)據(jù)源適配器(222)從數(shù)據(jù)源 (220)提取數(shù)據(jù)項(224)。此外,數(shù)據(jù)源適配器(222)能調(diào)用數(shù)據(jù)通知處理程序接口(232) 以通知項管理器(210)數(shù)據(jù)項(224)的變化,如果數(shù)據(jù)源(220)能發(fā)布這種通知。項管理器(210)也可與項再現(xiàn)器(240)和占位符再現(xiàn)器(242)交互。舉例而言, 再現(xiàn)器(240和242)能產(chǎn)生用于本地數(shù)據(jù)表示(250)的項,其表示在數(shù)據(jù)源(220)中的數(shù)據(jù)項列表(226)的至少一部分。舉例而言,項管理器(210)可調(diào)用項再現(xiàn)器(240)來將數(shù)據(jù)項(224)再現(xiàn)為數(shù)據(jù)表示項(254)。如果數(shù)據(jù)源(220)和數(shù)據(jù)源適配器(222)不同步地返回所請求的數(shù)據(jù)項(224),那么項管理器(210)可調(diào)用占位符再現(xiàn)器(224)來再現(xiàn)待用的占位符(255)而不是實際數(shù)據(jù)表示項(254)直到返回了相對應的數(shù)據(jù)項(224)為止。占位符(255)和數(shù)據(jù)表示項(254)能包括于數(shù)據(jù)表示項的列表(256)中,其能由項管理器(210) 管理。而且,項管理器(210)能使得數(shù)據(jù)表示項(254)和數(shù)據(jù)表示項的列表(256)的占位符(255)對于客戶端(260)而言可用,向客戶端提供數(shù)據(jù)表示項的列表(256)的列舉。客戶端(260)可包括應用(262)、控制(264)或其組合。在圖2的圖示實施例中, 客戶端(260)包括應用(262)和控制(264)。但是,客戶端(260)可僅包括應用或僅包括控制。在圖2的實施例中,控制(264)能調(diào)用項管理器接口(270)以請求數(shù)據(jù)表示項(254) (此可認為是請求數(shù)據(jù)項(224)本身或從項管理器(210)請求數(shù)據(jù)表示項(254)。此外,項管理器(210)能調(diào)用元素通知處理程序接口(272)來通知控制(264)數(shù)據(jù)表示項的列表 (256)的變化。此外,列表編輯器接口(280)能由控制(264)或應用(262)調(diào)用以請求對數(shù)據(jù)表示項的列表(256)和數(shù)據(jù)項列表(226)做出變化。而且,項通知處理程序接口(282) 能由項管理器(210)調(diào)用以向應用(262)提供通知,諸如關(guān)于項管理器(210)狀態(tài)的通知, 以及如果客戶端(260)執(zhí)行這些任務,脫水和再水合數(shù)據(jù)表示項(254)的狀態(tài)的通知。實際上,客戶端(260)能通過項管理器接口(270)請求數(shù)據(jù)表示項(254)。項管理器(210)又可以通過數(shù)據(jù)源適配器(222)從數(shù)據(jù)源(220)提取相對應的數(shù)據(jù)項(224)。 數(shù)據(jù)項(224)能經(jīng)由數(shù)據(jù)源適配器(222)返回,且可由項再現(xiàn)器(240)實例化為數(shù)據(jù)表示項(254)且包括于數(shù)據(jù)表示項的列表(256)中。項管理器(210)能向客戶端(260)提供數(shù)據(jù)表示項(254),諸如通過向客戶端(260)提供到本地數(shù)據(jù)表示(250)中的項的指針??蛻舳?260)也可通過列表編輯器接口(280)請求對數(shù)據(jù)表示項的列表(256)和數(shù)據(jù)項列表 (226)做出變化。項管理器(210)能對數(shù)據(jù)表示項的列表(256)做出這些變化且能通過調(diào)用數(shù)據(jù)源接口(230)并經(jīng)由數(shù)據(jù)源適配器(222)請求變化來請求數(shù)據(jù)源(220)對數(shù)據(jù)項列表(226)做出這些變化。而且,數(shù)據(jù)源(220)可通過數(shù)據(jù)通知處理程序接口(232)告知項管理器數(shù)據(jù)項列表(226)的變化且項管理器(210)能通過元素通知處理程序接口(272)告知客戶端(260)數(shù)據(jù)表示項的列表(256)的變化。B.數(shù)據(jù)項管理器環(huán)境的細節(jié)
      項管理器(210)可以是以標準語言和格式實施的模塊,例如實施在ECMAScript文本文
      8件中。可替換地,項管理器的代碼可為一些其它格式,諸如動態(tài)鏈接庫的格式,或者項管理器可更密切地合并到應用本身內(nèi),諸如在靜態(tài)庫中。項管理器可為能重新使用的模塊。術(shù)語能重新使用指項管理器為能插入到各種不同環(huán)境中以與客戶端和數(shù)據(jù)源交互的模塊。在這樣的不同的環(huán)境中,客戶端和/或數(shù)據(jù)源可不同地配置,但項管理器仍能提供用于客戶端和數(shù)據(jù)源的接口。舉例而言,項管理器可包括于客戶端應用的代碼中,項管理器可為單獨于客戶端的組件但運行于與客戶端相同的過程中,項管理器可包括于這樣的環(huán)境中,其中項管理器以獨立于相應客戶端的過程而運行,等等。數(shù)據(jù)項(224)可為各種不同格式中的任何格式,且可當它們在環(huán)境(200)的組件內(nèi)和/或環(huán)境(200)的組件之間傳遞時可翻譯。舉例而言,數(shù)據(jù)源適配器(222)可將數(shù)據(jù)項(224)轉(zhuǎn)換為ECMAScript對象,其可具有JSON(JavaScript對象表示法)可串行化的 ECMAScript對象為性質(zhì),其表示用作項密鑰的項數(shù)據(jù)和串(或其它數(shù)據(jù)結(jié)構(gòu))。每個這樣的密鑰可為對于數(shù)據(jù)項而言不改變的值,且其不同于數(shù)據(jù)源(220)中數(shù)據(jù)集中其它數(shù)據(jù)項的密鑰。舉例而言,密鑰可為由用于保持記錄的數(shù)據(jù)源(220)構(gòu)成的密鑰或者它們可為識別符,諸如驅(qū)動器登記號、社會安全號等。對于這樣的密鑰表示敏感信息的情況,可采取適當安全措施,諸如加密技術(shù)來保護這些密鑰。這些密鑰能由項管理器用于保持記錄,諸如區(qū)分和/或匹配相對應的數(shù)據(jù)項和/或數(shù)據(jù)表示項。項再現(xiàn)器(240)可以各種形式之一實例化數(shù)據(jù)表示項(254),諸如HTML文檔對象模型(DOM)元素子樹的形式。I.數(shù)據(jù)源接口
      數(shù)據(jù)源適配器(222)可為客戶側(cè)模塊,其與數(shù)據(jù)源(220)接口且向項管理器(210)提供數(shù)據(jù)源接口(230)。數(shù)據(jù)源接口(230)可在由項管理器(210)調(diào)用時實施由數(shù)據(jù)源適配器(222)執(zhí)行的方法。在本文中將給出這些和其它方法的偽代碼的實例。應了解,命名慣例、方法的布置以及甚至圖2中模塊的總布置可以其它方式來實施??紤]到這一點,下面為這些方法之一的實例,itemsFromKey,以偽代碼示出用于調(diào)用該方法
      void itemsFromKey(string key, Integer countBefore, Integer countAfter, function void itemsAvailable(
      Array results,
      Integer offset,
      Integer count,
      Integer index
      在此方法中,請求由字符串“key”指示的數(shù)據(jù)項(224),以及在數(shù)據(jù)項列表(226)中的具有給定密鑰的數(shù)據(jù)項(224)之前的數(shù)據(jù)項(224)的數(shù)量(Integer countBefore)和具有給定密鑰的數(shù)據(jù)項(224)之后的數(shù)據(jù)項(224)的數(shù)量(Integer countAfter) 0因此,這限定了在所請求的列表中數(shù)據(jù)項(224)的范圍。但是,可允許數(shù)據(jù)源(220)返回比此范圍所示的更多或更少的數(shù)據(jù)項(224),可能在某約束內(nèi)。舉例而言,數(shù)據(jù)源(220)可返回至少由給定密鑰所示的數(shù)據(jù)項(224)和之前的一項和之后的一項(如果Integer countBefore和 Integer countAfter各具有至少一的值)。如在上文的偽代碼中所示的那樣,itemsFromKey方法也傳遞被稱作itemsAvailable的回調(diào)函數(shù),當來自數(shù)據(jù)源(220)的數(shù)據(jù)項(224)可用時,數(shù)據(jù)源適配器(222)可調(diào)用該函數(shù)。數(shù)據(jù)源適配器(222)可同步地或異步地調(diào)用itemsAvailable回調(diào)函數(shù)以取決于是否能同步返回數(shù)據(jù)項(224)而同步地或異步地返回數(shù)據(jù)項(224)。在調(diào)用此函數(shù)時,數(shù)據(jù)源適配器能在“結(jié)果”中包括一個或多個數(shù)據(jù)項(224)的陣列。在陣列“結(jié)果”中的數(shù)據(jù)項(224)能布置成與所包括的數(shù)據(jù)項在數(shù)據(jù)項列表(226)中相同的次序。在結(jié)果中的每個數(shù)據(jù)項(224)可以下面的形式包括密鑰和數(shù)據(jù)對象{key: “…”, dataObject:…}。對itemsAvailable函數(shù)的調(diào)用也能指示由陣列“results (結(jié)果)”中的給定密鑰所示的數(shù)據(jù)項(224)的偏移(整數(shù)“offset (偏移)”)。舉例而言,如果在陣列“results”中具有給定密鑰的數(shù)據(jù)項(224)為在陣列中的第三項,那么整數(shù)“offset”能具有值二。這能允許項管理器(210)將在結(jié)果內(nèi)定位具有給定密鑰的數(shù)據(jù)項(224)。數(shù)據(jù)源適配器(222)也可包括在數(shù)據(jù)源(220)處的總數(shù)據(jù)項列表(226)中的數(shù)據(jù)項(224)數(shù)量的計數(shù)(整數(shù)“count”),如果這種計數(shù)為數(shù)據(jù)源(220)當前已知的且提供給數(shù)據(jù)源適配器(222)。數(shù)據(jù)源適配器(222)也可包括具有給定密鑰的數(shù)據(jù)項(224)的索引(整數(shù) “index”),其能指示具有給定密鑰的數(shù)據(jù)項(224)在總數(shù)據(jù)項列表(226)中的位置或偏移。除了 itemsFromKey之外,數(shù)據(jù)源適配器(222)可實施其它方法,這些方法能通過數(shù)據(jù)源接口(230)調(diào)用以取回數(shù)據(jù)項(224)。這些其它方法可類似于itemsFromKey方法,但所示項可以其它方式指示。舉例而言,數(shù)據(jù)源適配器(222)可實施itemsFromEnd, 項管理器(210)可通過itemsFromEnd請求始于數(shù)據(jù)項列表(226)的結(jié)尾且往回計數(shù)規(guī)定計數(shù)(整數(shù)“count”)的數(shù)據(jù)項(224)的范圍,如由用于調(diào)用該方法的下面的偽代碼所 7]\ (移除了回調(diào)函數(shù) itemsAvailable 的細節(jié))“void itemsFromEnd (Integer count, function void itemsAvailable (···)) ”。作為另一實例,數(shù)據(jù)源適配器(222)可實施 itemsFromStart,項管理器(210)可通過itemsFromStart請求從數(shù)據(jù)項列表(226)開始且向前計數(shù)規(guī)定計數(shù)(整數(shù)“count”)的數(shù)據(jù)項(224)的范圍,如由用于調(diào)用該方法的下面的偽代碼所不(移除了回調(diào)函數(shù) itemsAvailable 的細節(jié))“void itemsFromStart (Integer count, function void itemsAvailable (…))”。作為又一實例,數(shù)據(jù)源適配器(222)可實施itemsFromlndex,項管理器(210)可通過itemsFromlndex請求在具有規(guī)定索引(由整數(shù)“index”所示)的數(shù)據(jù)項(224)之前(如由integer countBefore所示)和之后(如由integer countAfter所示)的數(shù)據(jù)項的范圍,如在用于調(diào)用該方法的下面的偽代碼中所不的那樣“void itemsFromlndex (Integer index, Integer countBefore, Integer countAfter, function void itemsAvailable (…))”。作為又一實例,數(shù)據(jù)源適配器(222) 可實施itemsFromPrefix,項管理器(210)可通過itemsFromPrefix請求在具有規(guī)定前綴或描述(由字符串“prefix”所示)的數(shù)據(jù)項(224)之前(如由integer countBefore所示) 和之后(如由integer countAfter所示)的數(shù)據(jù)項的范圍,如在用于調(diào)用該方法的下面的偽代石馬中所不的那樣“void itemsFromPrefix (string prefix, Integer countBefore, Integer countAfter, function void itemsAvailable (…)),,。數(shù)據(jù)源適配器(222)可實施所有這些方法,比所有這些方法少的方法。而且,數(shù)據(jù)源適配器(222)可實施其它方法,作為上文所討論的那些方法的補充或替代。舉例而言,環(huán)境(200)可被配置成使得數(shù)據(jù)源至少實施itemsFromlndex方法或itemsFromKey和 itemsFromStart 方法。
      數(shù)據(jù)源(220)和數(shù)據(jù)源適配器(222)能被配置成在結(jié)果陣列中返回至少所請求的項(如果其存在)。范圍參數(shù)(integer count, integer countBefore 和 integer countAfter)能由數(shù)據(jù)源適配器(222)和數(shù)據(jù)源(220)構(gòu)想為來自項管理器的提示,其將告知數(shù)據(jù)源(220)其試圖獲得什么項。數(shù)據(jù)源(220)能在每種情況下自由返回更少或更多項。但是,如果范圍參數(shù)大于零,則數(shù)據(jù)源(220)和數(shù)據(jù)源適配器(222)能被配置成在由參數(shù)所指示的方向中返回至少一個附加項。當請求數(shù)據(jù)項列表(226)的一部分時,項管理器(210)能請求其已提取的數(shù)據(jù)項列表(226)中的相鄰區(qū)域的重疊部分。項管理器(210)能使用此重疊信息來提供“下一 / 前一”列舉給客戶端(260),即使在數(shù)據(jù)源(220)不支持索引的情況下。項管理器(210)也可使用該重疊信息來檢測數(shù)據(jù)項列表(226)的變化,其可提示項管理器(210)觸發(fā)刷新操作(在下文中更多地討論)。當數(shù)據(jù)項(224)的結(jié)果傳遞到項管理器(210)時,項管理器 (210)能驗證結(jié)果不與項管理器(210)以數(shù)據(jù)表示項的列表(256)的形式高速緩存的數(shù)據(jù)項列表(226)的部分沖突。舉例而言,如果項管理器(210)根據(jù)數(shù)據(jù)表示項的列表(256) 確定兩個數(shù)據(jù)項(224)相鄰(諸如用于這些項的數(shù)據(jù)表示項(254)在數(shù)據(jù)表示項的列表 (256)中相鄰的情況下),但兩個數(shù)據(jù)項(224)在結(jié)果陣列中并不相鄰,這可指示矛盾。相似地,如果數(shù)據(jù)項(224)的索引改變,這可指示矛盾。在矛盾的情況下,項管理器能開始刷新操作(在下文中更多地討論)以獲得數(shù)據(jù)的一致視圖,且能生成變化通知給客戶端(260)。 通過避免向客戶端(260)報告矛盾結(jié)果直到提取了用于解決該矛盾的足夠信息為止,項管理器能呈現(xiàn)數(shù)據(jù)項(224)的自相一致的表示,即使該表示可能在過期的時間。2.數(shù)據(jù)通知處理程序接口
      數(shù)據(jù)源適配器(222)也可調(diào)用關(guān)于數(shù)據(jù)通知處理程序接口(232)的方法,其為數(shù)據(jù)源適配器(222)能通過其通知項管理器(210)數(shù)據(jù)項列表(226)變化(或者簡單地告知項管理器(210)某些事物變化使得能由項管理器(210)發(fā)起刷新操作)的接口。所有這樣的通知可為可選的(例如,許多web數(shù)據(jù)源并不提供這樣的通知)且能以某些其它方式維護一致性。舉例而言,客戶端(260)能周期性地告知項管理器(210) “刷新”所有數(shù)據(jù),項管理器(210)被實例化以觀察是否有任何事物變化,這將在下文中更多地討論。3.再現(xiàn)器接口
      如上文所指出的那樣,項管理器(210)可調(diào)動項再現(xiàn)器(240)來將數(shù)據(jù)項(224)實例化為數(shù)據(jù)表示項(254),且項管理器(210)能調(diào)動占位符再現(xiàn)器(242)來實例化占位符
      (255)。在一個實施方式中,項管理器(210)與再現(xiàn)器(240和242)之間的接口可由再現(xiàn)器 (240和242)來實現(xiàn),其為能由項管理器(210)調(diào)用的函數(shù)。項再現(xiàn)器(240)能接受數(shù)據(jù)項 (224)且返回數(shù)據(jù)表示項(254),其可為用戶接口元素,諸如由更小用戶接口元素構(gòu)成的樹的用戶接口元素。舉例而言,再現(xiàn)器(240或242)的輸出可為HTML字符串或DOM元素樹。 但能替代地使用其它用戶接口框架。舉例而言,除了用戶接口元素之外,再現(xiàn)器(240和/ 或242)中的一個或這兩個能產(chǎn)生再現(xiàn)的輸出。當調(diào)用占位符再現(xiàn)器(242)來實例化占位符(255)時,項管理器(210)可傳遞項的索引(或用于獲得項的索引的函數(shù))到占位符再現(xiàn)器(242)。但是,如果其為未知的,甚至可不傳遞索引。這是因為使用占位符(255)代替數(shù)據(jù)表示項(254)直到能提取相對應的數(shù)據(jù)項(224)為止。因此,關(guān)于對應于占位符(255)的數(shù)據(jù)項(224)已知很少(若有的話)信息。占位符(255)能充當句柄,其表示在數(shù)據(jù)表示項的列表(256)中的真實的數(shù)據(jù)表示項(254)的位置。當數(shù)據(jù)表示項(254)可用時,項管理器(210)可向客戶端(260)傳遞到占位符(255)和數(shù)據(jù)表示項(254)的指針,且能告知客戶端(260)利用適當數(shù)據(jù)表示項(254) 來替換占位符(255)。當項管理器(210)從數(shù)據(jù)源(220)請求數(shù)據(jù)時,項管理器(210)能檢測數(shù)據(jù)源(220)是否同步(即,與重入調(diào)用一起)返回結(jié)果,且若如此,項管理器(210)能避免創(chuàng)建占位符(255),因為能同步返回實際數(shù)據(jù)表示項(254)。4.項管理器接口
      項管理器接口(270)能向客戶端(260)提供數(shù)據(jù)表示項的列表(256)的列舉,其表示在數(shù)據(jù)源(220)的數(shù)據(jù)項列表(226)的至少一部分。該列舉可為同步的,即使數(shù)據(jù)源(220) 并不同步響應,因為客戶端實際上列舉數(shù)據(jù)表示項的列表(256)。列舉能始于數(shù)據(jù)項列表 (226)的開始或結(jié)尾(即,數(shù)據(jù)表示項的列表(256)表示數(shù)據(jù)項列表(226)的開始或結(jié)尾處點)或者在某些其它位置,諸如具有給定索引或密鑰的數(shù)據(jù)表示項(254)。項管理器接口(270)的列舉方法能返回數(shù)據(jù)表示項且某些能接受數(shù)據(jù)項(224) 的識別符或數(shù)據(jù)表示項(254)作為參數(shù)。下文為用于調(diào)用從數(shù)據(jù)表示項的列表(256)返回特定數(shù)據(jù)表示項的方法的偽代碼的某些實例(其中的每一個表示在數(shù)據(jù)項列表(226) 中的數(shù)據(jù)項(224)) iiElement previousltem(Element item) ”,其返回表示在規(guī)定的數(shù)據(jù)表示“item”之前緊鄰的數(shù)據(jù)項(224)的數(shù)據(jù)表示項(254) ,Element firstltemO”, 其返回表示數(shù)據(jù)項列表(226)中第一數(shù)據(jù)項(224)的數(shù)據(jù)表示項(254) ;“Element nextltem(Element item) ”,其返回表示數(shù)據(jù)項列表(226)中的規(guī)定項之后的下一項的數(shù)據(jù)項(224)的數(shù)據(jù)表示項(254) ,Element IastItemO ”,其返回表示數(shù)據(jù)項列表(226)中最后數(shù)據(jù)項(224)的數(shù)據(jù)表示項(254) ,Element itemFromKey(string key)”,其返回表示具有特定密鑰的數(shù)據(jù)項(224)的數(shù)據(jù)表示項(254) ,Element itemFromPrefix(string prefix)”,其返回表示具有特定前綴或描述的數(shù)據(jù)項(224)的數(shù)據(jù)表示項(254);以及, “Element itemAtlndex (Integer index) ”,其返回表示具有特定索引的數(shù)據(jù)項(224)的數(shù)據(jù)表不項(254) ο對于這些方法中的每一個,所返回的項可為占位符(255)或數(shù)據(jù)表示項(254),取決于數(shù)據(jù)是否在調(diào)用時可用(例如,如果項再現(xiàn)器(240)已經(jīng)被調(diào)用來用于該項,則可返回來自該調(diào)用的數(shù)據(jù)表示項(254)。將在下文中更詳細地討論占位符(255)的使用。5.元素通知處理程序接口和刷新操作
      數(shù)據(jù)表示項(254)(或占位符(255))僅能用于表示數(shù)據(jù)項(224),只要數(shù)據(jù)表示項
      (254)由項管理器(210)識別為如此。因此,可告知客戶端(260)數(shù)據(jù)表示項的列表(256) 的這些變化。舉例而言,如果占位符(255)響應于調(diào)用列舉方法由項管理器(210)返回到客戶端(260),且現(xiàn)所請求的數(shù)據(jù)表示項(254)可用(且已提取其所需的所有資源,如下文所討論的那樣),該方法能通過元素通知處理程序接口(272)調(diào)用以告知客戶端(260)。下面為這種調(diào)用的偽代碼的實例“void itemAvailable (Element item, Element placeholder) ”,其中“item”為數(shù)據(jù)表示項(254)(其可為到數(shù)據(jù)表示項的列表
      (256)中的數(shù)據(jù)表示項(254)的指針),且“占位符”為由數(shù)據(jù)表示項的列表(256)中的數(shù)據(jù)表示項(254)(其也可為到占位符(255)的指針)替換。應當指出的是,這是單獨于上文所討論的itemsAvailable的方法。在數(shù)據(jù)表示項(254)和占位符(255)為用戶接口元素的情況下,元素通知處理程序接口(272)能用傳入的數(shù)據(jù)表示項(254)來替換用戶接口中的占位符(255)。從這點開始,占位符(255)不能由項管理器(210)識別為有效項參數(shù)。當更新數(shù)據(jù)表示項時,項管理器(210)可發(fā)起刷新操作,刷新操作能生成變化通知集。為了開始刷新操作,能由項管理器(210)提取數(shù)據(jù)源(220)中的更新的數(shù)據(jù)集的更新表示。能通過比較更新表示與原始表示來生成變化通知集。變化通知集能表示得到始于原始表示的更新表示的可能變化集??赡艿淖兓砂ū忍娲兓俚淖兓?,替代變化集將例如表示刪除原始數(shù)據(jù)集中的所有項且在更新的數(shù)據(jù)集中插入所有項。變化通知集能經(jīng)由元素通知處理程序接口(272)發(fā)送到客戶端(260)。項管理器(210)能向客戶端(260)呈現(xiàn)接口,該接口的表現(xiàn)如同數(shù)據(jù)源(220)提供同步變化通知,無論數(shù)據(jù)源(220)是否實際如此。這可以以將由項管理器(210)執(zhí)行的三個主要步驟進行與數(shù)據(jù)源(220)中的數(shù)據(jù)項列表(226)相比,檢測到當前本地數(shù)據(jù)表示 (250)過期,提取呈數(shù)據(jù)表示項(254)形式的更新表示來替換本地數(shù)據(jù)表示(250)的全部或部分,以及比較更新的本地數(shù)據(jù)表示(250)的原始版本和更新版本來生成變化通知。這些的每一個將在下文中討論。a)檢測過期本地數(shù)據(jù)表示
      如果例如由客戶端(260)請求刷新操作(即,提取呈數(shù)據(jù)表示項(254)形式的更新表示來替換所有或部分本地數(shù)據(jù)表示(250),且比較更新的本地數(shù)據(jù)表示(250)的原始版本和更新版本以生成變化通知),則可繞開對本地數(shù)據(jù)表示(250)是否過期的檢測。客戶端 (260)能經(jīng)由項管理器接口(270)請求刷新操作,例如通過調(diào)用方法(例如,通過調(diào)用“void refreshO”)。舉例而言,客戶端(260)可被配置成周期性地請求刷新操作或者可由用戶輸入來請求刷新操作。此外,項管理器(210)或適配器(222)能自主發(fā)起刷新操作,例如當項管理器(210)或適配器(222)已檢測到本地數(shù)據(jù)表示(250)過期時。舉例而言,當客戶端(260)請求附加數(shù)據(jù)表示項(254)時可檢測到過期本地數(shù)據(jù)表示(250)。項管理器(210)可請求已經(jīng)提取的本地數(shù)據(jù)表示(250)的重疊部分,作為請求由客戶端(260)所請求的新數(shù)據(jù)項(224)的補充。項管理器(210)能在數(shù)據(jù)項批(224) 從數(shù)據(jù)源(220)到達時處理數(shù)據(jù)項批(224)。每次批到達時,項管理器(210)能比較與表示先前返回的數(shù)據(jù)項(224)的數(shù)據(jù)表示項(254)的重疊(若有的話)來檢查一致性。舉例而言,如果數(shù)據(jù)表示項K先前在項J之后,那么現(xiàn)在其在項H之后,那么某些事物變化,甚至客戶端最近的請求僅為項K。如果對列表中的數(shù)據(jù)項(224)提供索引,那么數(shù)據(jù)項索引中的變化也可指示對數(shù)據(jù)項列表(226)中一個或多個其它數(shù)據(jù)項(224)的變化。項管理器(210)可以試圖確定什么有變化且提取被確定為變化的新數(shù)據(jù)的子集。 可替換地,能由項管理器(210)來重新提取在本地數(shù)據(jù)表示(250)(其可為客戶端(260)當前維護句柄到的所有數(shù)據(jù)表示項(254))中的所有數(shù)據(jù)表示項(254)。下文為此提取的討論。b)提取更新的數(shù)據(jù)表示
      當提取更新的數(shù)據(jù)表示為刷新操作的部分時,項管理器(210)可進入不同操作模式。 以此方式,項管理器(210)能忽略由于進入此模式之前發(fā)送的請求而到達的數(shù)據(jù)項(224)。 此外,雖然在此模式,項管理器(210)可與數(shù)據(jù)源(220)通信以提取數(shù)據(jù)批直到項管理器 (210)具有一致的“快照”為止,即,對應于原始本地數(shù)據(jù)表示(250)(即,已可用于項管理器(210)的本地數(shù)據(jù)表示)的數(shù)據(jù)源(220)中的數(shù)據(jù)部分的完整的更新的本地數(shù)據(jù)表示 (250)。能由項管理器(210)使用各種試探法來獲得這種快照。在一個實施方式中,其可用于數(shù)據(jù)表示項的列表,可以進行以盡可能少的請求來重新獲得實例化的子列表的嘗試,且項管理器(210)能檢查結(jié)果的每批請求以查看哪些仍需請求。在此方案中,如果對原始本地數(shù)據(jù)表示(250)中的數(shù)據(jù)表示項(254)的請求失敗,則可認為該具體項被刪除,但在發(fā)生這種失敗之前或者該數(shù)據(jù)表示項(254)被成功地再提取,該項可認為是在刷新操作中仍待提取的項。如果項管理器(210)找到所接收的數(shù)據(jù)項(224)批之間的矛盾,則提取過程能重新開始且能再次請求在本地數(shù)據(jù)表示(250)中所有數(shù)據(jù)表示項(254)的數(shù)據(jù)項(224)。舉例而言,如果在發(fā)送不同批的時間之間數(shù)據(jù)在數(shù)據(jù)源(220)中變化,可發(fā)生這種情況。雖然項管理器(210)處于其刷新模式,其能中止從數(shù)據(jù)源(220)請求新數(shù)據(jù)項 (224)。但是,項管理器(210)能通過響應于請求返回占位符(255)而繼續(xù)處理來自客戶端 (260)的請求??商鎿Q地,如果這些請求的履行在執(zhí)行刷新操作的過程中構(gòu)成重要因素,則項管理器(210)可完成某些客戶端請求。c)比較表示和生成變化通知
      生成變化通知可以各種方式中的任何方式來進行。舉例而言,變化通知集可表示在原始本地數(shù)據(jù)表示(250)中刪除所有數(shù)據(jù)表示項(254)且將所有數(shù)據(jù)表示項(254)插入于更新的本地數(shù)據(jù)表示(250)中。但是這種變化通知集可不向客戶端(260)提供足夠的信息來以有幫助的方式向用戶傳達變化??商鎿Q地,項管理器(210)能生成變化通知集,其表示似乎合理的變化集,即使數(shù)據(jù)源(220)中數(shù)據(jù)集變化的真實序列是項管理器(210)未知的。這可由項管理器(210)使用能減少由變化通知所表示的變化量的技術(shù)來進行,從而變化量小于其它可能的變化集, 例如如果變化包括在原始本地數(shù)據(jù)表示(250)中刪除所有數(shù)據(jù)表示項(254)和將所有數(shù)據(jù)表示項(254)插入于更新的本地數(shù)據(jù)表示(250)中??蛻舳?260)能使用這種變化通知集來以各種方式向用戶傳達變化。舉例而言,客戶端(260)可提供動畫來強調(diào)這些變化。此外,客戶端(260)能以其它方式來傳達變化。舉例而言,如果發(fā)生于屏幕頂部顯示的項示出數(shù)據(jù)表示項的列表(254)移動到數(shù)據(jù)源(220)中數(shù)據(jù)集的另一部分,那么客戶端能讓可見窗口滾動到其原始位置(且示出所有隨后的數(shù)據(jù)表示項(254)),而不是使得窗口滾動剛好保持一項在屏眷頂部。下文為項管理器(210)能用于生成變化通知的技術(shù)的一種實施方式的描述。總之,此技術(shù)能逐漸地更改原始本地數(shù)據(jù)表示(250)直到其匹配更新的本地數(shù)據(jù)表示(250)。 此技術(shù)將參看圖3來描述,其示出原始本地數(shù)據(jù)表示(310)的一部分的特定實例,所接收的在刷新操作中提取的更新數(shù)據(jù)項(320)和在已運行列表生成技術(shù)之后所得到的更新的本地數(shù)據(jù)表示(330)的部分。在圖3中,項以其次序在表示中列出,其也可為項索引的次序,如所圖示的那樣。 在圖3中,帶問號的三角形示出占位符,帶大寫字母的三角形示出由客戶端請求且實例化 (例如,再現(xiàn)為發(fā)送到客戶端的Π描述)的數(shù)據(jù)表示項,且?guī)ё帜傅姆娇蚴境鰪臄?shù)據(jù)源返回但未由客戶端請求且仍未實例化的數(shù)據(jù)表示項。在問號或大些字母下方的數(shù)字指示在數(shù)據(jù)源中總數(shù)據(jù)集中的項的索引號。此外,大寫字母能表示數(shù)據(jù)表示項的密鑰。
      原始數(shù)據(jù)表示(310)被圖示為包括帶索引85和86的兩個占位符(表示由客戶端請求但未由項管理器返回的項),之后為具有相應索引87、88、89和90的實例化數(shù)據(jù)表示項 D、E、F和G,且然后為具有相應索引91和92的未請求的數(shù)據(jù)項H和J。所接收的更新數(shù)據(jù)項(320)包括帶相應索引86、87、88、89、90和91的項C、D、Q、G、E和R0能比較所接收的更新數(shù)據(jù)項(320)與原始本地數(shù)據(jù)表示(310)以生成將發(fā)送到客戶端的變化通知。現(xiàn)將描述用于生成這些變化通知的技術(shù)。在該技術(shù)中,能找到在原始本地數(shù)據(jù)表示(310)中出現(xiàn)但未在接收的更新數(shù)據(jù)項 (320)中出現(xiàn)的項。對于這樣的項能發(fā)送移除型變化通知且能移除這些項。舉例而言,項 F的移除型通知能發(fā)送給客戶端且項F能從本地數(shù)據(jù)表示移除。在此操作期間,可以限制對客戶端的訪問使得不允許客戶端觀察項上的索引,因為這樣的索引可能不一致??商鎿Q地,當做出可影響索引的其它變化時,如果索引變化且客戶端被告知索引變化,則可允許客戶端看到這樣的索引。作為又一替代,可允許客戶端觀察索引,即使索引是不一致的。該技術(shù)還可包括找到由索引請求的針對項生成的占位符且使那些占位符與那些項匹配。舉例而言,如果在原始本地數(shù)據(jù)表示中帶索引85和86的占位符由索引請求,則這將包括使原始本地數(shù)據(jù)表示(310)中具有索引86的占位符與所接收的更新數(shù)據(jù)項(320) 中具有索引86的項C匹配。這能在移動數(shù)據(jù)表示中的占位符之前進行,以防止由索引請求的項的占位符移動,因為這種索引請求的占位符的移動能導致占位符與具有除所請求的索引之外的索引的項匹配。雖然在圖3中未圖示,所接收的更新數(shù)據(jù)項(320)可在多個非鄰接范圍上鋪展。舉例而言,由于可允許客戶端保持到非鄰接范圍的句柄而發(fā)生這種情況,因此原始本地數(shù)據(jù)表示(310)可包括由客戶端所請求的表示項的多個非鄰接范圍。此外,項管理器可僅請求在原始本地數(shù)據(jù)表示(310)中每個項周圍有限的范圍。該技術(shù)可包括確定所接收的更新數(shù)據(jù)項中每個范圍的匹配。舉例而言,匹配可包括在原始本地數(shù)據(jù)表示(310)中的范圍,其與所接收的更新數(shù)據(jù)項(320)中的匹配范圍共享最多的個別項。在某些情況下,在原始本地數(shù)據(jù)表示(310)中的范圍可合并,如果合并的范圍映射在所接收的更新的數(shù)據(jù)項(320)中的范圍。在所接收的更新的數(shù)據(jù)項(320)中,能標記出每個范圍的邊界,在該邊界外部所有項不出現(xiàn)在原始本地數(shù)據(jù)表示(310)中。舉例而言,此可包括標記在所接收的更新數(shù)據(jù)項(320)中在項E與R之間和項C與D之間的邊界。這些邊界能區(qū)分簡單看起來尚未觀察到的項(例如,項C與R)與已插入到數(shù)據(jù)源中的數(shù)據(jù)集中的項(例如,項Q)。關(guān)于在所接收的更新的數(shù)據(jù)項(320)的每個范圍中出現(xiàn)的項和其在原始本地數(shù)據(jù)表示中的匹配范圍,能識別無需相對于彼此移動的項集且將其標記為靜止的。這可進行使得這樣的靜止項的數(shù)量增加且因此能減小移動型變化通知的數(shù)量。例如,對于列表,此可包括分配序數(shù)給原始本地數(shù)據(jù)表示(310)中的項,且然后在所接收的更新的數(shù)據(jù)項集中找到這些序數(shù)中“最長的有序子序列”。舉例而言,此可使用已知的“耐心分類(patience sorting)”技術(shù)的一部分來進行。在圖3的圖示實例中,此可導致識別D和G為靜止的,其中G和G形成最長有序子序列。(或者,該技術(shù)能識別D和E為靜止的,具有相同大小的有序子序列)。如果在上文所討論的標記邊界內(nèi)存在占位符,則能基于在兩個數(shù)據(jù)集中出現(xiàn)的近鄰來嘗試匹配這些占位符與在原始本地數(shù)據(jù)表示(310)中未出現(xiàn)的所接收的更新數(shù)據(jù)項 (320)中的項。舉例而言,如果具有索引86的占位符并未已由于匹配索引值而與項C匹配, 則該占位符能與項C匹配,因為項C和占位符具有相同近鄰(項D)。該技術(shù)可包括針對在所接收的更新數(shù)據(jù)項(320)和原始本地數(shù)據(jù)表示(310)中非靜止的項發(fā)送移動型變化通知。該移動能在本地數(shù)據(jù)表示中執(zhí)行。舉例而言,此可包括發(fā)送項E的移動型通知且將項E移動到本地數(shù)據(jù)表示中的項G之后。當生成并發(fā)送這些通知時,能限制客戶端的存取。舉例而言,可允許客戶端觀察項的近鄰,而不是項的索引。該技術(shù)還可包括找到在所接收的更新的數(shù)據(jù)項(320)中出現(xiàn)的新項,而不是原始本地數(shù)據(jù)表示(310)。這些新項能添加到本地數(shù)據(jù)表示且相對應的插入型變化通知能被發(fā)送到客戶端。舉例而言,在圖3中,項Q能插入于項D之后且插入型變化通知能發(fā)送到客戶端。如同移動,當執(zhí)行插入時能限制客戶端訪問。舉例而言,可允許客戶端觀察任何項的近鄰,而不是項的索引。此外,該技術(shù)能包括比較出現(xiàn)于原始本地數(shù)據(jù)表示(310)和更新的本地數(shù)據(jù)表示 (330)中的項內(nèi)容。對于內(nèi)容已變化的項,這些項能在本地數(shù)據(jù)表示中更新且變化型變化通知能發(fā)送到客戶端。同樣,在此操作期間能限制客戶端的訪問使得能由客戶端觀察到除了索引之外的任何事物。該技術(shù)還可識別在原始本地數(shù)據(jù)表示(310)和更新的數(shù)據(jù)表示(330)中出現(xiàn)的索引已經(jīng)變化的項。舉例而言,在圖3的實例中,能改變項E和G的索引且索引變化型變化通知能發(fā)送到客戶端。在此操作期間,能限制客戶端訪問使得其能觀察到變化項的新索引和舊索引,而不是其它索引。該技術(shù)也可包括匹配占位符,這些占位符尚未與項匹配且在所接收的更新數(shù)據(jù)項 (320)的標記的邊界外部的項的原始本地數(shù)據(jù)表示(310)中的范圍外圍上。能基于它們所匹配的項或者其對于實例化的項或其它占位符的鄰近性來更新來自原始本地數(shù)據(jù)表示 (310)的占位符的索引。在進行此操作之后,能移除對客戶端訪問的限制,且能允許客戶端以客戶端常用方式訪問本地數(shù)據(jù)表示。與所接收的更新數(shù)據(jù)項(320)中的項匹配的占位符能利用在本地數(shù)據(jù)表示中的匹配項而實例化且能發(fā)送“item available (項可用)”通知。此外,如果在數(shù)據(jù)源中的數(shù)據(jù)集中的總項計數(shù)變化(根據(jù)關(guān)于從數(shù)據(jù)源發(fā)送到項管理器的總計數(shù)的信息或者數(shù)據(jù)源返回數(shù)據(jù)源列表中的最后數(shù)據(jù)項),那么計數(shù)變化型變化通知能發(fā)送到客戶端以指示此變化。在圖3的實例中,上文所討論的刷新技術(shù)的操作能導致在圖3頂部的原始本地數(shù)據(jù)表示(310)更新為在圖3底部所圖示的更新的本地數(shù)據(jù)表示(330),且變化通知適當?shù)匕l(fā)送給客戶端??墒褂闷渌夹g(shù)來以其它方式進行此操作,這些其它方式對于在該時間發(fā)送變化通知是符合邏輯的。舉例而言在上文所討論的技術(shù)中的操作次序能改變,只要它們?nèi)詫е驴捎煽蛻舳诉m當?shù)靥幚淼淖兓ㄖ挠行蛏伞T谕瓿闪怂⑿虏僮髦?,可重新開始對本地數(shù)據(jù)表示中仍存在占位符的請求的項的提取。這樣的占位符可存在于原始本地數(shù)據(jù)表示(310)中和/或它們已在上文所討論的刷新技術(shù)期間由于客戶端對數(shù)據(jù)的請求而被插入。舉例而言,在圖3的實例中,此可導致提取對應于更新的本地數(shù)據(jù)表示(330)中占位符的項。因此,能適當?shù)靥崛№?,即使忽略刷新操作之前起始的對?shù)據(jù)源請求的結(jié)果,以簡化保持本地數(shù)據(jù)表示在刷新技術(shù)結(jié)束時一致。
      6.列表編輯器接口和優(yōu)化編輯
      返回參看圖2,如果數(shù)據(jù)源(220)和數(shù)據(jù)源適配器(222)實施一個或多個編輯方法,則能支持編輯。項管理器能覆蓋這些方法中的每一個,因此,項管理器(210)能同步更新數(shù)據(jù)表示項的列表(256),由此允許同步地更新客戶端(260)的用戶接口,即使數(shù)據(jù)源(220)異步地執(zhí)行由客戶端(260)請求的更新。這些對數(shù)據(jù)表示項的列表的“優(yōu)化”更新將通常為正確的(如果且當所請求的編輯在數(shù)據(jù)源(220)成功時優(yōu)化更新將為正確的),且數(shù)據(jù)源 (220)能在后來的某時間悄悄更新數(shù)據(jù)項列表(226)而不需要對數(shù)據(jù)表示項的列表(256) 的進一步更新或?qū)K端用戶的視覺反饋。如果對數(shù)據(jù)項列表(226)的更新失敗,那么項管理器(210)能向客戶端(260)報告錯誤且恢復數(shù)據(jù)表示項的列表(256)以反映數(shù)據(jù)項列表(226)的實際狀態(tài)。舉例而言,這可包括撤銷對數(shù)據(jù)表示項的列表(256)已做出的更新且告知客戶端(260)更新已被撤銷。 舉例而言,項管理器(210)可告知客戶端(260)所請求的更新不再有意義(如果其不再有意義,例如,由于另一用戶對數(shù)據(jù)項列表(226)做出變化)或者不允許該更新(例如,因為正確許可并未準備好進行更新),且可撤銷尚未做出的任何更新。但是,如果刪除失敗,項管理器(210)可不對齊更新隊列,因為無論如何,另外的編輯通常并不指刪除的項。而且,項管理器(210)可不撤銷對“不再有意義的”失敗的刪除,因為無論如何,這種失敗將指示已經(jīng)刪除了該項。在某些情況下,當更新數(shù)據(jù)項列表(226)的請求未決時,數(shù)據(jù)源(220)可變得不可用。在這樣的情形下,項管理器(210)能保持已對數(shù)據(jù)表示項的列表(256)做出的優(yōu)化更新,因為那些更新將仍可由數(shù)據(jù)源(220)來執(zhí)行。但是,項管理器(210)可告知客戶端(260) 數(shù)據(jù)源(220)是不可用的。在這樣的情形下,客戶端(260)可比通常情況更頻繁請求刷新操作且可能不允許進一步編輯。應當指出,如果所請求的更新并不由數(shù)據(jù)源(220)執(zhí)行,當執(zhí)行下一刷新操作時,能使得本地數(shù)據(jù)表示項的列表(256)按照該數(shù)據(jù)項列表(226)。此外, 如果由客戶端(260)所請求的更新中的某些在刷新操作之后不再有意義,那么當進行刷新操作時可由項管理器(210)告知客戶端(260)。數(shù)據(jù)源適配器(222)能確定對于不再有意義的更新、不允許的更新和數(shù)據(jù)源不可用的情況何時發(fā)布代碼。數(shù)據(jù)源適配器(222)能發(fā)送這些代碼到項管理器(210)且項管理器能發(fā)送它們到客戶端(260)。7.提取數(shù)據(jù)表示項的資源
      在諸如HTML平臺的某些配置中,項管理器(210)可依賴web瀏覽器機構(gòu)來提取用于數(shù)據(jù)表示項(254)的資源(例如,用于數(shù)據(jù)表示項的圖像等)。舉例而言,該資源可包括與特定 HTML 標簽相關(guān)聯(lián)的資源,諸如 <img src= “ [URL],,>,〈iframe src= “ [URL],,>,〈script src= “[URL]” >,〈input type= “image” src= “[URL]” >,〈video poster= “[URL]” > 和 〈object data= “[URL] ”>,其中“[URL]”指該資源的均勻資源定位器。當數(shù)據(jù)表示項(254) 由項再現(xiàn)器(240)再現(xiàn)為DOM樹時,在DOM樹內(nèi)參考的這些資源能進入到瀏覽器的提取隊列內(nèi)。如果客戶端(260)向下滾動很多頁,但當前在顯示屏幕上可見的資源能首先提取,而不是等待于該隊列后面。為了繞開在這樣的情形中的瀏覽器邏輯,項管理器(210)能拖延調(diào)用項再現(xiàn)器(240)來再現(xiàn)數(shù)據(jù)表示項(254)直到資源隊列僅具有條目的閾值數(shù)為止。舉例而言,如果瀏覽器允許六個同時的連接,六可用作閾值。項管理器(210)能創(chuàng)建需要資源的用戶接口元素的暫時副本且能將上傳句柄附到這些元素上,因此項管理器(210)能知道何時已成功地提取資源。項管理器(210)能確定接下來再現(xiàn)哪個項(和因此提取該項的資源)。這種確定能使用項管理器(210)的內(nèi)部邏輯且能依靠來自客戶端(260)的優(yōu)先級信息。舉例而言, 客戶端(260)能調(diào)用告知項管理器(210)哪些項是“高優(yōu)先級”(諸如屏幕上的那些)和 “中優(yōu)先級”(諸如剛好在屏幕下的那些)的方法,且項管理器(210)能假定其它項為“低優(yōu)先級”。項管理器(210)能調(diào)動項再現(xiàn)器(240)以從最高到最低的此優(yōu)先級次序來再現(xiàn)這些項。作為實例,控制(264)能通過項管理器接口(270)來調(diào)用方法,諸如通過做出能由以下偽代碼表不的調(diào)用“void prioritize (Element first, Element last, Priority priority) ”,其中“Element first”和“Element last”為在項范圍中的第一項和最后項, 且“Priority priority”指示該范圍的優(yōu)先級。8.數(shù)據(jù)表示項的返回占位符
      如在上文中簡要地討論的那樣,如果客戶端(260)向項管理器(210)發(fā)送項管理器 (210)尚未從數(shù)據(jù)源(220)取回的項表示的請求,那么項管理器(210)能向客戶端(260)返回占位符(255)直到項管理器(210)從數(shù)據(jù)源(220)成功地提取了相對應數(shù)據(jù)項(224)為止。項管理器(210)也可包括在本地數(shù)據(jù)表示(250)中的占位符(255),其中占位符(255) 能用于保持記錄目的,諸如當相對應的數(shù)據(jù)項(224)從數(shù)據(jù)源(220)返回時與相對應的數(shù)據(jù)表示項(254)匹配。此外,客戶端(260)可使用占位符(255)用于各種目的,諸如保持記錄和代替實際數(shù)據(jù)表示項(254)顯示直到返回了數(shù)據(jù)表示項(254)為止。在一個實施方式中,項管理器(210)能向客戶端(260)暴露項管理器接口(270), 項管理器接口(270)能允許響應于來自客戶端(260)的不同類型的請求以各種方式提取個別數(shù)據(jù)表示項(254),如上文所討論的那樣。如上文所討論的那樣,響應于對這些請求的方法中每一個的調(diào)用,項管理器(210)能作為項再現(xiàn)器(240)所生成的用戶接口元素而返回所請求的數(shù)據(jù)表示項(254)。當調(diào)用這些項請求方法之一時,項管理器(210)能首先檢查以確定項管理器 (210)是否已經(jīng)具有在本地數(shù)據(jù)表示(250)中高速緩存的給定項的數(shù)據(jù),其可在存儲器中。 若如此,項管理器(210)可已調(diào)用項再現(xiàn)器(240),在此情況下,項管理器(210)能再次作為數(shù)據(jù)表示項(254)返回相同的用戶接口元素,否則項管理器(210)能立即調(diào)用項再現(xiàn)器 (240)且返回實例化(例如,再現(xiàn)為能發(fā)送給客戶端的Π描述)項給客戶端(260)作為數(shù)據(jù)表不項(254) ο否則,項管理器(210)能在適配器(222)上調(diào)用適當方法,向適配器(222)傳遞適配器(222)能同步地或異步地調(diào)用的回調(diào)函數(shù)以返回所請求的數(shù)據(jù)項(224),如上文所討論的那樣。數(shù)據(jù)源(220)能快速地返回數(shù)據(jù)項(224)(諸如在數(shù)據(jù)源(220)為本地數(shù)據(jù)源的情況下)使得適配器(222)可以通過立即調(diào)回到項管理器(210)內(nèi)(即通過同步地調(diào)用回調(diào)函數(shù))而同步地報告所得到的數(shù)據(jù)項(224)。項管理器(210)能檢測到何時發(fā)生這種同步回調(diào)。舉例而言,項管理器(210)傳遞到適配器的回調(diào)能在為該項創(chuàng)建的隙數(shù)據(jù)結(jié)構(gòu)中存儲數(shù)據(jù)表示項(254)。如上文所討論的那樣,項管理器(210)能執(zhí)行調(diào)用函數(shù)以調(diào)用到適配器內(nèi)。在執(zhí)行了調(diào)用函數(shù)之后,項管理器(210)可檢查隙數(shù)據(jù)結(jié)構(gòu)以查看數(shù)據(jù)表示項(254)或數(shù)據(jù)項(224)是否存儲于那里。 若否,那么項管理器(210)能知道請求將異步完成且能創(chuàng)建占位符(255)。關(guān)于項的每個請求可再次做出這種確定或者可僅對于特定數(shù)據(jù)源(220)做出一次或僅周期性地做出確定。 可替換地,適配器(222)和/或數(shù)據(jù)源(220)可告知項管理器(210)數(shù)據(jù)源(220)是否能同步返回項。對數(shù)據(jù)源(220)或數(shù)據(jù)項組(224)的這種總體確定能認為是對于應用該確定的每個數(shù)據(jù)項(224)的確定。如果回調(diào)函數(shù)已同步回調(diào),則項管理器(210)能調(diào)用項再現(xiàn)器(240)且向客戶端 (260)返回實例化項作為數(shù)據(jù)表示項(254)。這可在不生成或提供占位符(255)的情況下進行。如果項管理器(210)并非已接收了所請求的數(shù)據(jù)項(224),且所請求的數(shù)據(jù)項將不同步返回,那么可使用異步調(diào)用來提取數(shù)據(jù)項(224)。為了避免對相同數(shù)據(jù)項(224)的冗余調(diào)用,當發(fā)起數(shù)據(jù)提取時,可以生成該提取的識別符且將其添加到散列表。預期由特定提取返回的數(shù)據(jù)項(224)的占位符(255)能添加到本地數(shù)據(jù)表示(250)中的隙且用此提取識別符標記。當提取完成時,無論成功還是失敗,能從散列表移除其識別符。因此,當客戶端(260)從異步返回相對應數(shù)據(jù)項(224)的數(shù)據(jù)源(220)請求尚未實例化的數(shù)據(jù)表示項(254)時,可存在至少三種子情況。首先,客戶端(260)可已經(jīng)請求了數(shù)據(jù)表示項(254),在此情況下,對于該項可已經(jīng)存在占位符(255)且能返回該占位符 (255)。其次,客戶端(260)能第一次請求數(shù)據(jù)表示項(254)且來自客戶端(260)的請求能發(fā)起對數(shù)據(jù)源(220)的異步請求,也可生成新占位符(255)并返回。第三,客戶端(260)能第一次請求數(shù)據(jù)表示項(254),但請求可使得相對應的請求不被發(fā)送到數(shù)據(jù)源(220)直到履行了對數(shù)據(jù)源(220)之前的請求(例如,項管理器(210)將提取在給定項之后相對應數(shù)據(jù)項(224),但該項本身仍僅為占位符(255));能創(chuàng)建并返回新占位符(255)并返回,且能等待提取發(fā)起直到適當時間為止。當數(shù)據(jù)項(224)從數(shù)據(jù)源(220)到達時,項管理器(210)能匹配數(shù)據(jù)項(224)與占位符且調(diào)用項再現(xiàn)器(240)用于現(xiàn)可實例化的任何數(shù)據(jù)項(224)。對于每個實例化,項管理器(210)可發(fā)送itemAvailable通知給客戶端(260),向客戶端(260)傳遞對現(xiàn)有用戶接口元素的參考(占位符(255))和替換用戶接口元素(數(shù)據(jù)表示項(254))??蛻舳?260) 能通過用數(shù)據(jù)表示項(254)替換占位符(255)來做出響應。這種替換能導致客戶端(260) 用數(shù)據(jù)表示項(254)的呈現(xiàn)(例如顯示)來替換占位符(255)的呈現(xiàn)(例如,顯示)。項管理器(210)也可檢驗從數(shù)據(jù)源(220)接收回的結(jié)果鄰近的占位符(255)且如果這些項尚未被請求,能發(fā)起相對應數(shù)據(jù)項(224)的新提取。項管理器(210)能試圖減少到數(shù)據(jù)源(220)的網(wǎng)絡往返次數(shù),因此項管理器(210) 能計數(shù)相鄰占位符(255)且分批請求數(shù)據(jù)項(224)。因此,來自項管理器(210)的一個請求可請求在來自客戶端(260)的多個請求中所請求的數(shù)據(jù)項(224)。如果從數(shù)據(jù)源(220)接收回的數(shù)據(jù)項集(224)延伸超過當前占位符集(255),那么額外數(shù)據(jù)項(224)能存儲于本地數(shù)據(jù)表示(250)中的隙中使得某些另外的請求可與表示那些高速緩沖的數(shù)據(jù)項(224)的數(shù)據(jù)表示項(254)同步履行??稍试S數(shù)據(jù)源(220)返回比項管理器(210)所請求的更多或更少的項。上文所述的方案可允許這種情況,但可能由項管理器(210)發(fā)起某些不必要的提取。為了減少這種可能性,項管理器(210)可通常在進行下一請求之前等待返回自一個請求的數(shù)據(jù)項(224)。 這也可允許更多的數(shù)據(jù)項(224)由其密鑰請求,而不是以其它方式,諸如僅以索引方式請求。舉例而言,項管理器(210)可以此方式等待,只要請求是針對相鄰的數(shù)據(jù)項(224)(且以某種方式來確定緊鄰,諸如由返回的數(shù)據(jù)項陣列中的數(shù)據(jù)項(224)的相對定位)。在此情況下,例如,如果項管理器(210)接收密鑰為“A”的數(shù)據(jù)項(224),那么項管理器(210)可請求密鑰為“A”的數(shù)據(jù)項(以提供請求的某種重疊以例如檢測是否在請求之間對數(shù)據(jù)源(220) 中的數(shù)據(jù)已做出變化)和下10個項。但項管理器(210)可選擇不等待,如果一個請求和它后面的下一個請求正請求并不彼此相鄰的數(shù)據(jù)項(224),因為然后對第一請求的響應將不可能包括將在下一請求中請求的數(shù)據(jù)項(224)。在某些情況下,客戶端(260)和項管理器(210)可不知道在數(shù)據(jù)源(220)的數(shù)據(jù)集中的數(shù)據(jù)項總數(shù)。并非需要終端用戶在顯示任何占位符(255)之前等待網(wǎng)絡往返來確定數(shù)據(jù)延伸,項管理器能“推測地”返回占位符(255)。換言之,項管理器(210)能返回這樣的占位符(255),在確立計數(shù)之前,推測在數(shù)據(jù)源(220)的數(shù)據(jù)集中的項數(shù)量大于客戶端(260)將請求的數(shù)量。在此推測證明是錯誤的情況下,可移除某些占位符(255),因為它們并不實際上對應于數(shù)據(jù)項(224)。項管理器(210)可向客戶端(260)發(fā)送與在項實際上從數(shù)據(jù)集刪除情況下項管理器(210)將發(fā)送的相同的“移除”通知。但是,為了給予客戶端(260)顯示此情形的不同動畫的選項(例如,微微淡出而不是引人注目的飛走效果),可伴隨該通知傳遞附加布爾參數(shù)(例如,名稱為“幻想”的參數(shù))。這種幻想?yún)?shù)可向客戶端 (260)指示就項管理器(210)做出的確定而言,并不存在對應于相關(guān)聯(lián)的占位符(255)的數(shù)據(jù)項(224)。這種幻想布爾可適用于其它情境,諸如當數(shù)據(jù)項(224)的兩個非鄰接的區(qū)域?qū)嵗癁閿?shù)據(jù)表示項(254)且擴展直到區(qū)域“沖突”為止,但在區(qū)域之間創(chuàng)建了太多占位符
      (255)。通過組合項管理器(210)的占位符特征與占位符再現(xiàn)器(242)和項再現(xiàn)器(240) 的數(shù)據(jù)模板特征,能簡化在客戶端(260)與項管理器(210)之間的編程接口,因為客戶端 (260)和項管理器(210)能操作,而無需單獨句柄來跟蹤身份。替代地,項管理器(210)能向客戶端(260)傳遞對占位符(255)的參考和對所請求的數(shù)據(jù)表示項(254)的參考,指示客戶端(260)用數(shù)據(jù)表示項(254)(例如,利用itemAvailable通知)來替換占位符(255)。 客戶端(260)能在客戶端(260)的用戶接口數(shù)據(jù)結(jié)構(gòu)(例如,DOM樹)中的適當位置無條件地插入由調(diào)用請求方法之一返回的值(數(shù)據(jù)表示項(254)和/或占位符(255))且隨后在由項管理器(210)通知這樣做時換出任何占位符(255)。因此,客戶端(260)能與項管理器(210)交互,如同客戶端(260)與同步數(shù)據(jù)源交互,無論實際數(shù)據(jù)源(220)能否對數(shù)據(jù)請求提供同步響應。在替代設計中,項管理器(210)(而不是客戶端(260))能維護用戶接口數(shù)據(jù)結(jié)構(gòu)。 舉例而言,在用戶接口數(shù)據(jù)結(jié)構(gòu)為DOM樹的情況下,客戶端(260)能接收數(shù)據(jù)表示項(254) 作為DOM元素且能假定DOM元素具有對應于DOM元素下方完整列表中的項的子級??蛻舳?(260)能使用項管理器(210)而不是DOM接口來從一個子級導航到下一個子級。項管理器 (210)可包括占位符(255)且能用DOM樹本身中的數(shù)據(jù)表示項(254)來替換它們。以此方式,項管理器(210)能沿著子級前后導航,且能用占位符(255)且在隨后數(shù)據(jù)表示項(254) 變得可用時用數(shù)據(jù)表示項(254)更新子級。環(huán)境(200)也可包括用于保持記錄的一個或多個數(shù)據(jù)結(jié)構(gòu),諸如用于跟蹤在數(shù)據(jù)表示項(254)的列表中一個或多個位置的數(shù)據(jù)結(jié)構(gòu)。III.數(shù)據(jù)項管理器技術(shù)現(xiàn)將討論若干數(shù)據(jù)項管理器。這些技術(shù)中每一個能在計算環(huán)境中執(zhí)行。舉例而言,每個技術(shù)可在計算機系統(tǒng)中執(zhí)行,計算機系統(tǒng)包括至少一個處理器和至少一個存儲器,存儲器包括存儲于其上的指令,這些指令當由至少一個處理器執(zhí)行時執(zhí)行技術(shù)(一個或多個存儲器存儲指令(例如,對象代碼)且當處理器(一個或多個)執(zhí)行那些指令時,處理器(一個或多個)執(zhí)行技術(shù))。相似地,一個或多個計算機可讀存儲介質(zhì)可具有實施于其上的計算機可執(zhí)行的指令,其當由至少一個處理器執(zhí)行時造成至少一個處理器執(zhí)行該技術(shù)。參看圖4,將描述數(shù)據(jù)項管理器技術(shù)。在該技術(shù)中,項管理器能經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求(410)數(shù)據(jù)項且能經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源接收回(420)數(shù)據(jù)項。此外, 項管理器能維護(430)表示從數(shù)據(jù)源接收的表示數(shù)據(jù)項的數(shù)據(jù)表示項的列表且能向客戶端提供(440)貫穿數(shù)據(jù)表示項的列表的列舉。數(shù)據(jù)表示項可為用戶接口元素,且維護(430)數(shù)據(jù)表示項的列表還可包括調(diào)動再現(xiàn)器來再現(xiàn)來自從數(shù)據(jù)源接收的數(shù)據(jù)項的用戶接口元素。維護(430)列表還可包括在該列表中包括用戶接口元素。向客戶端提供(440)貫穿該列表的列舉包括對于數(shù)據(jù)表示項中的至少一個,請求用于數(shù)據(jù)表示項的資源,等待資源加載,且在資源加載之后向客戶端提供數(shù)據(jù)表示項。維護(430)數(shù)據(jù)表示項的列表還可包括從客戶端接收數(shù)據(jù)表示項中一個或多個的一個或多個優(yōu)先級指定,且以由優(yōu)先級指定(一個或多個)規(guī)定的順序加載數(shù)據(jù)表示項的列表的資源。維護(430)數(shù)據(jù)表示列表可包括使得該列表中數(shù)據(jù)表示項狀態(tài)脫水。舉例而言, 可響應于用戶輸入做出狀態(tài)變化,其能通過存儲于特定位置,諸如存儲于存儲器和/或長期存儲設備中而脫水。該狀態(tài)能表示數(shù)據(jù)表示項的變化,諸如響應于用戶輸入的變化。項管理器能從列表移除數(shù)據(jù)表示(例如,通過刪除該表示和/或從存儲器移除整個列表)且能在后來將數(shù)據(jù)表示項重新插回到列表內(nèi)。項管理器能將該狀態(tài)再水合回到數(shù)據(jù)表示項內(nèi)。 這可在數(shù)據(jù)表示項重新插入到列表內(nèi)之前或之后進行。以此方式,能維護對數(shù)據(jù)表示項的變化。舉例而言,可維護響應于用戶輸入對數(shù)據(jù)表示做出的用戶接口變化,即使在從數(shù)據(jù)表示項的列表刪除數(shù)據(jù)表示項且隨后再插入到數(shù)據(jù)表示項的列表中的情況下。水合可允許以降低的存儲成本來維護用戶輸入變化,因為能丟棄用戶接口數(shù)據(jù)結(jié)構(gòu)的方面,且如果它們隨后使用,能重新創(chuàng)建那些方面。此外,水合可允許將狀態(tài)轉(zhuǎn)變成能序列化用于長期存儲的形式,諸如不包括指針的形式,指針僅在存儲器中用戶接口數(shù)據(jù)結(jié)構(gòu)當前形式中有意義。項管理器可通過第一接口與客戶端交互,且可通過第二接口與數(shù)據(jù)源適配器交互。項管理器也可分別通過第三接口和第四接口與項再現(xiàn)器和占位符再現(xiàn)器交互。項管理器可從數(shù)據(jù)源異步接收(420)數(shù)據(jù)項且向客戶端提供(440)貫穿數(shù)據(jù)表示項的列表的列舉可包括向客戶端提供貫穿數(shù)據(jù)表示項的列表的同步列舉。舉例而言,向客戶端提供此同步列舉可包括向客戶端提供一個或多個占位符,同時等待對應于占位符(一個或多個)的一個或多個數(shù)據(jù)表示項變得對于項管理器可用。此外,向客戶端提供同步列舉可包括當對應于占位符(一個或多個)的數(shù)據(jù)表示項(一個或多個)變得可用時,將這些數(shù)據(jù)表示項(一個或多個)提供給客戶端且指示客戶端用數(shù)據(jù)表示項(一個或多個)來替換占位符(一個或多個)。圖4的技術(shù)還可包括項管理器向客戶端提供(450)數(shù)據(jù)表示項的列表的變化通知。項管理器也可通過比較包括一個或多個數(shù)據(jù)表示項的第一數(shù)據(jù)表示與包括一個或多個數(shù)據(jù)表示項的第二數(shù)據(jù)表示來生成變化通知。維護(430)數(shù)據(jù)表示項的列表可包括從客戶端接收一個或多個請求集以對數(shù)據(jù)表示項的列表做出一個或多個編輯。項管理器可發(fā)送請求(一個或多個)到數(shù)據(jù)源以對由數(shù)據(jù)表示項所表示的數(shù)據(jù)項列表做出編輯(一個或多個)。項管理器能對數(shù)據(jù)表示項的列表做出編輯(一個或多個)且通知客戶端已做出編輯(一個或多個),而無需等待數(shù)據(jù)源對請求 (一個或多個)做出響應。如果數(shù)據(jù)源完成了對數(shù)據(jù)項列表的編輯(一個或多個),則能保持對數(shù)據(jù)表示項的列表的編輯。如果數(shù)據(jù)源對數(shù)據(jù)項列表的編輯失敗,能撤銷對數(shù)據(jù)表示項的列表的編輯。維護(430)數(shù)據(jù)表示項的列表可包括從數(shù)據(jù)源請求多個數(shù)據(jù)項且響應地從數(shù)據(jù)源接收回不同數(shù)量的數(shù)據(jù)項(多于或少于所請求的數(shù)量)。項管理器也可利用表示從數(shù)據(jù)源接收回的不同數(shù)量的數(shù)據(jù)項的數(shù)據(jù)表示項來更新數(shù)據(jù)表示項的列表。維護(430)數(shù)據(jù)表示項的列表可包括從數(shù)據(jù)源處的數(shù)據(jù)項列表請求數(shù)據(jù)項子集, 其中子集彼此重疊。項管理器能使用選自由數(shù)據(jù)項索引、數(shù)據(jù)項密鑰和數(shù)據(jù)項索引和數(shù)據(jù)項密鑰組合構(gòu)成的識別符來識別從數(shù)據(jù)源請求的項。數(shù)據(jù)表示項的列表可表示在數(shù)據(jù)源處數(shù)據(jù)項列表的一部分。維護(430)數(shù)據(jù)表示項的列表可包括在數(shù)據(jù)表示項由客戶端請求時從數(shù)據(jù)項列表提取附加的數(shù)據(jù)項且釋放不再由客戶端使用的數(shù)據(jù)表示項。圖4的技術(shù)還可包括項管理器向客戶端提供(460)在數(shù)據(jù)源處的數(shù)據(jù)項列表的項計數(shù)。參看圖5,將描述另一數(shù)據(jù)項管理器技術(shù)。該技術(shù)可包括項管理器經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求(510)數(shù)據(jù)項且經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源接收回(520)數(shù)據(jù)項。數(shù)據(jù)項管理器可維護(530)表示從數(shù)據(jù)源接收的數(shù)據(jù)表示項的列表,其中數(shù)據(jù)表示項包括用戶接口元素。維護(530)該列表可包括調(diào)動(532)再現(xiàn)器來再現(xiàn)來自從數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項且在該列表中包括(534)這些數(shù)據(jù)表示項。此外,維護(530)列表還可包括從客戶端接收數(shù)據(jù)表示項中一個或多個的一個或多個優(yōu)先級指定,且以由優(yōu)先級(一個或多個)指定所規(guī)定的順序加載用于數(shù)據(jù)表示項的資源。項管理器可也向客戶端提供(540) 貫穿數(shù)據(jù)表示項的列表的列舉。參看圖6,將描述又一數(shù)據(jù)項管理器技術(shù)。圖6的技術(shù)可以包括經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求(610)數(shù)據(jù)項,且對數(shù)據(jù)源的請求通過在項管理器與數(shù)據(jù)源適配器之間的接口做出。該技術(shù)也可包括經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源接收(620)數(shù)據(jù)項??删S護(630)表示從數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項的列表,其中數(shù)據(jù)表示項可包括用戶接口元素。維護(630)該列表可包括調(diào)動¢32)再現(xiàn)器來再現(xiàn)來自從數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項且在該列表中包括(634)數(shù)據(jù)表示項??赏ㄟ^在項管理器與再現(xiàn)器之間的接口來調(diào)動 (632)再現(xiàn)器。舉例而言,再現(xiàn)器可為由項管理器調(diào)用的函數(shù)。圖6的技術(shù)還可包括向客戶端提供(640)貫穿數(shù)據(jù)表示項的列表的列舉,該列舉通過在項管理器與客戶端之間的接口提供。向客戶端提供¢40)列舉可包括向客戶端提供(642) —個或多個占位符,同時等待對應于占位符(一個或多個)的一個或多個數(shù)據(jù)表示項變得對于項管理器可用。當對應于占位符(一個或多個)的數(shù)據(jù)表示項(一個或多個)變得對于項管理器可用時,那么項管理器可向客戶端提供(644)數(shù)據(jù)表示項(一個或多個)且指示(646)客戶端用數(shù)據(jù)表示項(一個或多個)來替換占位符(一個或多個)。圖6的技術(shù)還可包括向客戶端提供(650)數(shù)據(jù)表示項的列表的變化通知。維護(630)數(shù)據(jù)表示項的列表可包括從客戶端接收對數(shù)據(jù)表示項的列表做出一個或多個編輯的一個或多個請求集;向數(shù)據(jù)源發(fā)送對由數(shù)據(jù)表示項所表示的數(shù)據(jù)項列表做出編輯(一個或多個)的一個或多個請求;對數(shù)據(jù)表示項的列表做出編輯(一個或多個)且告知客戶端已經(jīng)做出編輯(一個或多個),無需等待數(shù)據(jù)源對數(shù)據(jù)源的請求做出響應;確定數(shù)據(jù)源是否完成了對數(shù)據(jù)項列表的編輯(一個或多個);如果項管理器確定數(shù)據(jù)源完成了對數(shù)據(jù)項列表的編輯(一個或多個),那么保持對數(shù)據(jù)表示項的列表的編輯(一個或多個);以及如果項管理器確定數(shù)據(jù)源對完成數(shù)據(jù)項列表的編輯(一個或多個)失敗,那么撤銷對數(shù)據(jù)表示項的列表的編輯(一個或多個)。盡管已經(jīng)以特定于結(jié)構(gòu)特征和/或方法行為的語言描述了本主題,應了解,在所附權(quán)利要求中所限定的主題不必限于上文所述的具體特征或行為。而是,上文所述的具體特征和行為公開為實施權(quán)利要求的實例形式。
      權(quán)利要求
      1.一種計算機實施的方法,包括項管理器經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求數(shù)據(jù)項;所述項管理器經(jīng)由所述數(shù)據(jù)源適配器從所述數(shù)據(jù)源接收數(shù)據(jù)項;所述項管理器維護表示從所述數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項的列表;以及所述項管理器向客戶端提供貫穿數(shù)據(jù)表示項的列表的列舉。
      2.根據(jù)權(quán)利要求I所述的方法,其中維護所述數(shù)據(jù)表示項的列表包括使所述列表中的數(shù)據(jù)表示項的狀態(tài)脫水,所述狀態(tài)表示響應于用戶輸入所述數(shù)據(jù)表示項的變化;從所述列表移除所述數(shù)據(jù)表示項;將所述數(shù)據(jù)表示項重新插回到所述列表內(nèi);以及將所述狀態(tài)再水合到所述數(shù)據(jù)表示項內(nèi)。
      3.根據(jù)權(quán)利要求I所述的方法,其中維護所述數(shù)據(jù)表示項的列表包括從所述客戶端接收所述數(shù)據(jù)表示項中一個或多個的一個或多個優(yōu)先級指定;以及以所述一個或多個優(yōu)先級指定規(guī)定的順序加載所述數(shù)據(jù)表示項的資源。
      4.根據(jù)權(quán)利要求I所述的方法,其中所述方法還包括項管理器向所述客戶端提供數(shù)據(jù)表示項的列表變化的通知,且其中所述項管理器通過比較包括一個或多個數(shù)據(jù)表示項的第一數(shù)據(jù)表示與包括一個或多個數(shù)據(jù)表示項的第二數(shù)據(jù)表示來生成變化通知。
      5.根據(jù)權(quán)利要求I所述的方法,其中維護所述數(shù)據(jù)表示項的列表包括從所述客戶端接收對所述數(shù)據(jù)表示項的列表做出一個或多個編輯的一個或多個請求集合;向所述數(shù)據(jù)源發(fā)送對由所述數(shù)據(jù)表示項所表示的數(shù)據(jù)項列表做出一個或多個編輯的一個或多個請求;對所述數(shù)據(jù)表示項的列表做出一個或多個編輯且告知所述客戶端已做出了所述一個或多個編輯,而無需等待所述數(shù)據(jù)源對所述一個或多個請求做出響應;如果所述項管理器確定所述數(shù)據(jù)源完成了對所述數(shù)據(jù)項列表的一個或多個編輯,那么保持對所述數(shù)據(jù)表示項的列表的編輯;以及如果項管理器確定所述數(shù)據(jù)源未能完成對所述數(shù)據(jù)項列表的所述一個或多個編輯,那么撤銷對所述數(shù)據(jù)表示項的列表的一個或多個編輯。
      6.根據(jù)權(quán)利要求I所述的方法,其中維護所述數(shù)據(jù)表示項的列表包括請求來自所述數(shù)據(jù)源的多個數(shù)據(jù)項;響應地從所述數(shù)據(jù)源接收回不同數(shù)量的數(shù)據(jù)項;以及用表示從所述數(shù)據(jù)源接收回的數(shù)據(jù)項的不同數(shù)量的數(shù)據(jù)表示項來更新所述數(shù)據(jù)表示項的列表。
      7.根據(jù)權(quán)利要求I所述的方法,其中維護所述數(shù)據(jù)表示項的列表包括從所述數(shù)據(jù)源處的數(shù)據(jù)項列表請求數(shù)據(jù)項子集,所述子集彼此重疊。
      8.根據(jù)權(quán)利要求I所述的方法,其中所述數(shù)據(jù)表示項的列表表示在所述數(shù)據(jù)源處的數(shù)據(jù)項列表的一部分且維護所述數(shù)據(jù)表示項的列表包括在所述客戶端請求數(shù)據(jù)表示項時,從所述數(shù)據(jù)項列表提取附加數(shù)據(jù)項;以及釋放不再由所述客戶端使用的數(shù)據(jù)表示項。
      9.一種計算機實施的方法,包括經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求數(shù)據(jù)項,對所述數(shù)據(jù)項的請求通過在項管理器與所述數(shù)據(jù)源適配器之間的接口做出;經(jīng)由所述數(shù)據(jù)源適配器從所述數(shù)據(jù)源接收數(shù)據(jù)項;維護表示從所述數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項的列表;所述數(shù)據(jù)表示項包括用戶接口元素,且維護所述列表包括調(diào)動再現(xiàn)器來再現(xiàn)來自從所述數(shù)據(jù)源接收的所述數(shù)據(jù)項的數(shù)據(jù)表示項,通過在所述項管理器與所述再現(xiàn)器之間的接口來調(diào)動所述再現(xiàn)器;以及將所述數(shù)據(jù)表示項包括在所述列表中;以及向客戶端提供貫穿數(shù)據(jù)表示項的列表的列舉,通過在所述項管理器與所述客戶端之間的接口來提供所述列舉,并向所述客戶端提供所述列舉包括向所述客戶端提供一個或多個占位符,同時等待對應于所述一個或多個占位符的一個或多個數(shù)據(jù)表示項變得對于所述項管理器可用;以及當對應于所述一個或多個占位符的所述一個或多個數(shù)據(jù)表示項變得對于所述項管理器可用時,然后向所述客戶端提供一個或多個數(shù)據(jù)表示項且指導所述客戶端用所述一個或多個數(shù)據(jù)表示項替換所述一個或多個占位符;以及向所述客戶端提供所述數(shù)據(jù)表示項的列表變化的通知。
      10.一個或多個計算機可讀存儲介質(zhì),其具有實施于其上的計算機可執(zhí)行指令,當由至少一個處理器執(zhí)行時,所述指令使所述至少一個處理器執(zhí)行如權(quán)利要求1-9中任一項所述的方法。
      11.一種計算機系統(tǒng),包括至少一個處理器;以及至少一個存儲器,其包括存儲于其上的指令,當由所述至少一個處理器執(zhí)行時,所述指令使得所述至少一個處理器調(diào)動項管理器來執(zhí)行包括以下的行為經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求數(shù)據(jù)項;經(jīng)由所述數(shù)據(jù)源適配器從所述數(shù)據(jù)源接收數(shù)據(jù)項;維護表示從所述數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項的列表,所述數(shù)據(jù)表示項包括用戶接口元素,以及維護所述列表包括調(diào)動再現(xiàn)器來再現(xiàn)來自從所述數(shù)據(jù)源接收的所述數(shù)據(jù)項的數(shù)據(jù)表示項;以及將所述數(shù)據(jù)表示項包括在所述列表中;以及向客戶端提供貫穿所述數(shù)據(jù)表示項的列表的列舉。
      全文摘要
      項管理器可經(jīng)由數(shù)據(jù)源適配器從數(shù)據(jù)源請求和接收數(shù)據(jù)項。項管理器也可維護表示數(shù)據(jù)項的數(shù)據(jù)表示項的列表。數(shù)據(jù)表示項可包括用戶接口元素。而且,維護該列表可包括調(diào)動再現(xiàn)器來再現(xiàn)來自從數(shù)據(jù)源接收的數(shù)據(jù)項的數(shù)據(jù)表示項,且在該列表中包括數(shù)據(jù)表示項。項管理器可向客戶端提供貫穿數(shù)據(jù)表示項的列表的列舉。項管理器也可包括提供其它特征,諸如向客戶端提供數(shù)據(jù)表示項的列表變化的通知。
      文檔編號G06F9/46GK102591716SQ201210018558
      公開日2012年7月18日 申請日期2012年1月20日 優(yōu)先權(quán)日2011年1月21日
      發(fā)明者A.S.沙, M.A.內(nèi)爾特, N.布倫, P.A.古斯莫里諾, P.J.奎亞特科夫斯基, S.A.范內(nèi)斯 申請人:微軟公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1