2011-04-12 83 views
4

我正在開發一個複雜的頁面,其中包含一些小部件,一些'可拖動'元素和一個<canvas>交互式時間表。複雜的HTML工具提示(存儲) - 體系結構建議


問題:

mouseover - 上的元素,可以拖動(實體) - ,我要顯示包含一些先進的信息有關的工具提示(實體頁的「預覽」)該特定元素。

可拖動的項目(我認爲他們〜100)以這種方式來表示(其中有些是dinamically創建):

<!-- ... --> 
<div id="entity-1" class="draggable"> 
    <div class="title">title</div> 
    <img src="#URL" alt="..." /> 
    <div class="tooltip-wrapper"></div> 
</div> 
<div id="entity-2" class="draggable"> 
    <div class="title">title</div> 
    <img src="#URL" alt="..." /> 
    <div class="tooltip-wrapper"></div> 
</div> 
<div id="entity-3" class="draggable"> 
    <div class="title">title</div> 
    <img src="#URL" alt="..." /> 
    <div class="tooltip-wrapper"></div> 
</div> 
<!-- ... --> 

其中.tooltip-wrapper初始設置爲display:noneopacity:0

一一般工具提示是含有一些細節,即一個有點複雜HTML(很多簡化)

<div class="tooltip-entity-wrapper"> 
    <div class="title">entity title</div> 

    <div class="tab"><!-- tab content --></div> 
    <div class="tab"><!-- tab content --></div> 
    <div class="tab"><!-- tab content --></div> 

    <form action="..."> 
     <!-- form content --> 
    </form> 
    <a href="#URL"><!-- full entity page link --></a> 
</div> 

我噸邏輯思維能力約3可能的解決方案:

  • mouseover,(在第一個)使返回特定的提示HTML Ajax請求,注入它的提示,包裝裏面,拿出來和mouseout隱藏它。
  • mouseover上,(第一個)發出一個ajax請求,返回一個json,通過js(mustache)呈現它,將其注入到工具提示包裝中,顯示它並在mouseout上隱藏它。
  • 直接渲染工具提示的元素中,並切換它mouseover/mouseout

的CSS /佈局/定位是不是一個大問題,也是因爲我已經創建了一個工具提示mootools的插件樣機(如果u有關於一些偉大的定製mootools的工具提示插件任何建議,請讓我知道:))。

我只是需要遵循實施這一先進的「工具提示」系統,或者你有更好的解決方案,建議我哪條路小費/建議。 :)

謝謝大家


附:我正在開發使用Rails3中(和HAML,SCSS,指南針),並作爲mootools的JS框架(+鬍子的模板系統)的Web應用程序。

回答

4

你真的不能拿一個方法,並選擇它比其他的w/o覆蓋你的一些業務需求第一。

你需要問自己的問題是:


是SEO重要

如果是:

  • 重要的是不能在體內的含量,因爲它不是相關或獨特的,可能會影響您的關鍵字密度,並給谷歌的頁面的真實內容給錯誤的印象,然後AJAX
  • 重要的是要有在體內谷歌看到的,然後在一個隱藏的元素

使我有一種感覺你的應用程序將不會需要太多的這一點,但它是一個有效點。


DOM和 「性能是重要的」

如果是(你已經用帆布... 100+拖拽元素...)

  • 多少(實在是太多了? )節點你會有工具提示(額外的DOM節點)?太多?去與AJAX /事件代表團每頁
  • 幾個提示:仍可預渲染,以節省額外的請求(S)
  • 足跡將所有尖端的事件,代表
  • 延時等待XHR onComplete不受歡迎?預渲染!

網/請求

,如果你去了ajax的路線,你需要計算的方式,以儘量減少可能的請求的數量,特別是在相同的提示,可以一次又一次觸發。這意味着:

  • 緩存請求導致本地頁面和檢查,對緩存首先從服務器請求之前
  • 如果你的數據不是動態/實時,考慮甚至推到localStorage的下的一些關鍵/ DB ID ,這將可以在頁面重新加載,轉換和返回訪問者的情況下繼續。

至於如何做,我知道你是完全有能力這樣做的實際代碼這麼好運:)

從我的經驗的,我做這兩者的混合。庫存信息經常變化,但並不經常緩存每頁負載。使用/大小信息,表單助手等不會改變我在localStorage中的緩存。具有明顯SEO價值的工具提示在正文中。